MySQL:在连接中选择不匹配的行

时间:2013-12-17 10:42:11

标签: mysql join

表1包含一个包含数百万行的唯一ID列。

表2包含2列matchId1,matchId2,它可以保存表1中的ID。表2中可以有许多行引用给定的ID。

如何以有效的方式列出表1中未包含在表2中的ID(在任一列中)?

3 个答案:

答案 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