MySQL加入不等于空右表

时间:2017-06-14 10:01:33

标签: mysql join

我正在尝试连接两个表,其中右表可能为空。 如果它是空的,我想要左表中的所有记录。 如果它不为空,那么我希望左表中的所有记录都不在右表中。 像这样: venn diagram

我还需要过滤结果,以便tbl.free = 1

我认为这将是一个简单的任务:

SELECT tbl1.id, tbl1.name FROM tbl1 LEFT JOIN tbl2 ON tbl1.id <> tbl2.fk1 WHERE tbl1.free=1

我得到的结果是 当tbl2为空时,我得到所有tbl1条目,其中free = 1 - 这很好 当tbl2中有条目时,我得到tbl1中的所有条目 - 与上面完全相同(不好)

我该怎么办才能做这个操作???

2 个答案:

答案 0 :(得分:0)

我一开始误读了你的请求。你真正想要的只是来自tbl1的所有tbl2中没有匹配的记录。无需加入。只需NOT EXISTSNOT IN条款。

SELECT id, name 
FROM tbl1
WHERE id IS NOT IN (SELECT fk1 FROM tbl2);

答案 1 :(得分:0)

这是一种推测,但您可能需要在WHERE子句中添加一个条件,该子句检查第二个表中的列是否为NULL,这表示第一个表中的特定记录匹配:

SELECT tbl1.id, tbl1.name
FROM tbl1
LEFT JOIN tbl2
    ON tbl1.id = tbl2.fk1
WHERE tbl1.free = 1 AND tbl2.fk1 IS NULL