请参考这个数据库小提琴(SQL也粘贴在下面):
https://www.db-fiddle.com/f/bJ5FfufvP9GHPYtBhkywdP/5
我想显示“mpr_metrics”表中没有关联评论的行。但这里有一个问题:如果有一个指标具有关联的评论,并且该评论也与另一个评论共享相同的开始时间,那么它应该从结果集中排除。
例如,小提琴的结果是“3”,但它应该只显示计数“1”,因为只有 1 个指标(id=5)没有审核,并且没有与 start_time 值相同的审核另一篇评论。
CREATE TABLE mpr_metrics (
id INT,
start_time TIMESTAMP,
PRIMARY KEY (id)
);
CREATE TABLE mpr_metrics_reviews (
id INT,
metric_id INT,
PRIMARY KEY (id)
);
INSERT INTO mpr_metrics (id, start_time) values (1, '2024-09-16');
INSERT INTO mpr_metrics (id, start_time) values (2, '2024-09-16');
INSERT INTO mpr_metrics (id, start_time) values (3, '2024-09-09');
INSERT INTO mpr_metrics (id, start_time) values (4, '2024-09-09');
INSERT INTO mpr_metrics (id, start_time) values (5, '2024-09-11');
INSERT INTO mpr_metrics_reviews (id, metric_id) values (1, 1);
INSERT INTO mpr_metrics_reviews (id, metric_id) values (2, 3);
SELECT count(DISTINCT mpr_metrics.start_time)
FROM mpr_metrics
LEFT JOIN mpr_metrics_reviews
ON mpr_metrics.id = mpr_metrics_reviews.metric_id
WHERE mpr_metrics_reviews.id is null;
您需要另一个联接来排除与另一行共享开始时间的行。
SELECT COUNT(distinct m.id) AS count
FROM mpr_metrics AS m
LEFT JOIN mpr_metrics_reviews AS r
ON m.id = r.metric_id
LEFT JOIN (
SELECT m.id, m.start_time
FROM mpr_metrics AS m
JOIN mpr_metrics_reviews AS r
ON m.id = r.metric_id
) AS m1 ON m.start_time = m1.start_time
WHERE r.id IS NULL and m1.id IS NULL