如何查找没有来自另一个 table 数据的 ID
How to find IDs that do not have data from another table
我正在尝试编写一个查询,以提取 table 中没有某些数据的 ID。目前,我们正在尝试寻找属于某个 table 但缺少数据的人。
例如,我们要确保每个人都拥有所有这三个项目
表 1
item_ID
item_1
item_2
item_3
我们下面有这个table
表 2
ID .. item_ID
1 .. item_1
1 .. item_2
1 .. item_3
2 .. item_1
2 .. item_2
3 .. item_1
等等。您可以看到他们的 table 中缺少 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 丢失的东西,但到目前为止没有任何效果。
如果您在 table2 中有完整的 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
以获得所有可能组合的列表,然后从 table 中选择缺失的组合。
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
;
我正在尝试编写一个查询,以提取 table 中没有某些数据的 ID。目前,我们正在尝试寻找属于某个 table 但缺少数据的人。
例如,我们要确保每个人都拥有所有这三个项目
表 1
item_ID
item_1
item_2
item_3
我们下面有这个table
表 2
ID .. item_ID
1 .. item_1
1 .. item_2
1 .. item_3
2 .. item_1
2 .. item_2
3 .. item_1
等等。您可以看到他们的 table 中缺少 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 丢失的东西,但到目前为止没有任何效果。
如果您在 table2 中有完整的 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
以获得所有可能组合的列表,然后从 table 中选择缺失的组合。
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
;