如何找到没有来自另一个表的数据的id

w8ntj3qf  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(413)

我正在尝试编写一个查询,它将调出表中没有特定数据的id。目前,我们正在尝试查找属于某个表但缺少数据的人。
例如,我们要确保每个人都有这三个项目

表1

项目\u id
第1项
第2项
第3项
我们把这个放在table下面

表2

身份证件。。项目\u id
1 .. 第1项
1 .. 第2项
1 .. 第3项
2 .. 第1项
2 .. 第2项
三。。第1项
等等。您可以看到ID2缺少表中的项\u3,我想拉一个元组,在查询中显示2,项\u3。
到目前为止,我有这样的东西

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

我一直在尝试写一些东西,我可以拉的项目\u标识一些标识丢失,但没有工作到目前为止。

lmvvr0a8

lmvvr0a81#

如果表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 获取所有可能组合的列表,然后从表中选择缺少的组合。

vngu2lb8

vngu2lb82#

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
;

相关问题