加入相同的表两次以查找丢失的数据

时间:2016-08-12 14:46:29

标签: mysql

我有一个名为capacity_daily_values的表,其中我在两个方向上的国家/地区之间存储每日值。

表的架构是这样的:

id | direction | date_id | value

我需要在表格中为两个方向指定一个日期两行。像那样:

1 | 1 | 2015-01-01 | 1.00
2 | 2 | 2015-01-01 | 1.00

不幸的是有些数据丢失我只有两个方向之一的值,我需要弄清楚哪些日期已损坏。

我试图将两个表连接起来并查看,哪些结果具有NULL值,但没有成功。

SELECT * FROM `capacity_daily_values` c1 
LEFT JOIN capacity_daily_values c2 
    on c1.date_id = c2.date_id and c1.direction = 1 and c2.direction = 2 
having value is null

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

如果您只想列出不完整的日期,可以使用:

npm install request

看我的小提琴 - http://sqlfiddle.com/#!9/37c60/1

答案 1 :(得分:0)

我会使用常规的Join,就像您使用的那样,然后选择未包含在该连接表中的所有条目。

SELECT c1.* FROM `capacity_daily_values` c1 WHERE c1.id not in
(
  SELECT c2.id FROM `capacity_daily_values` c2 JOIN `capacity_daily_values` c3
    ON c2.direction != c3.direction AND c2.date_id = c3.date_id
)

我在子表中列出了两对条目,以获得两个条目ID。

所有具有损坏日期的ID都不应显示在此子表中。