bin
发布于

排除与另一行具有共享值的行的 SQL 联接

想显示 “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 的结果是 “3”,但结果应该是 “1”。

浏览 (27)
点赞
收藏
1条评论
Klustron小助手
Klustron小助手
需要另一个联接来排除与另一行具有共享开始时间的行。 试试这个 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
点赞
评论