表中的行在另外两个表中没有对应的表?

时间:2010-08-24 03:07:31

标签: sql mysql

SELECT left_tbl.*
  FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
  WHERE right_tbl.id IS NULL;

当您从左表中搜索行而没有右表中的对应行时,上面的代码可以很好地工作。

但是如何在左表中找到没有对应表的左表中的行?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您想在LEFT_TBL中找到两个其他表中不存在的记录吗?最具可读性的是:

SELECT a.*
  FROM LEFT_TBL lt
 WHERE NOT EXISTS(SELECT NULL
                    FROM TABLE_A a
                   WHERE a.id = lt.id)
   AND NOT EXISTS(SELECT NULL
                    FROM TABLE_B b
                   WHERE b.id = lt.id)

使用LEFT JOIN / IS NULL:

   SELECT lt.*
     FROM LEFT_TBL lt
LEFT JOIN TABLE_A a ON a.id = lt.id
LEFT JOIN TABLE_B b ON b.id = lt.id
    WHERE a.id IS NULL
      AND b.id IS NULL

如果您希望在两个表中的一个表中不存在LEFT_TBL条记录,请将AND子句中的WHERE更改为OR