表1包含一个包含数百万行的唯一ID列。
表2包含2列matchId1,matchId2,它可以保存表1中的ID。表2中可以有许多行引用给定的ID。
如何以有效的方式列出表1中未包含在表2中的ID(在任一列中)?
答案 0 :(得分:4)
SELECT x.*
FROM table1 x
LEFT
JOIN table2 y
ON y.id = x.id
WHERE y.id IS NULL;
或更具体地......
SELECT x.*
FROM table1 x
LEFT
JOIN table2 y
ON x.id IN(y.id1,y.id2)
WHERE y.id IS NULL;
这假设table2上有一个列PK
答案 1 :(得分:2)
一些建议
使用jons
SELECT x.*
FROM table1 x
LEFT JOIN table2 y ON y.matchId1 = x.id
LEFT JOIN table2 z ON z.matchId2 = x.id
WHERE y.matchId1 IS NULL AND z.matchId2 IS NULL
使用IN
SELECT x.*
FROM table1 x
WHERE x.id NOT IN
(
SELECT matchId1 FROM table2
UNION
SELECT matchId2 FROM table2
)
答案 2 :(得分:1)
试试这个:
SELECT table1.*
FROM table1
LEFT JOIN Table2 on table1.id in (table2.matchId1,table2.matchId2)
WHERE table2.matchId1 IS NULL AND table2.matchId2 IS NULL