如何查找没有其他表中数据的ID

时间:2018-04-27 17:48:07

标签: mysql sql outer-join

我正在尝试编写一个查询,该查询将提取其表中没有特定数据的ID。目前,我们正在尝试查找属于某个表但却缺少数据的人。

例如,我们希望确保每个人都拥有这三个项目

表1

ITEM_ID

  • ITEM_1

  • ITEM_2

  • ITEM_3

我们有下表

表2

ID .. item_ID

  • 1 .. item_1

  • 1 .. item_2

  • 1 .. item_3

  • 2 .. item_1

  • 2 .. item_2

  • 3 .. item_1

等等。您可以看到ID 2在其表中缺少item_3,我想在查询中拉出一个显示2,item_3的元组。

到目前为止,我有类似的东西

SELECT DISTINCT b.ID, a.item
    FROM TABLE1 a
        LEFT OUTER JOIN TABLE2 b
            ON a.ITEM_ID=b.ITEM_ID
WHERE b.ITEM_ID is NULL

我一直试图写一些我可以拉出item_ID的东西,但是有些ID丢失了,但到目前为止还没有任何工作。

2 个答案:

答案 0 :(得分:0)

如果你在表2中有完整的ID列表,那么你可以使用它,但如果你没有,你可以使用它:

SELECT ft.* 
FROM TABLE2 t2 RIGHT OUTER JOIN
(SELECT b.ID, a.ITEM_ID
  FROM TABLE1 a
    CROSS JOIN (SELECT DISTINCT ID FROM TABLE2) b) ft
      ON t2.id = ft.id AND t2.item_id = ft.item_id
WHERE t2.id IS NULL

http://sqlfiddle.com/#!9/2d0a19/7

我做CROSS JOIN以获取所有可能组合应该是什么的列表,然后从表中选择缺少的组合。

答案 1 :(得分:0)

SELECT a.ID, b.item_id
FROM (SELECT DISTINCT ID FROM Table2) AS a 
-- or TableX AS a -- if you have a TableX with the unique ID values used for Table2 
CROSS JOIN Table1 AS b
-- or (SELECT DISTINCT item_id FROM Table2) AS b -- if Table1 was not available
LEFT JOIN Table2 AS c ON a.ID = c.ID AND b.item_id = c.item_id
WHERE c.ID IS NULL
;