我正在尝试连接两个表,其中右表可能为空。 如果它是空的,我想要左表中的所有记录。 如果它不为空,那么我希望左表中的所有记录都不在右表中。 像这样: 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中的所有条目 - 与上面完全相同(不好)
我该怎么办才能做这个操作???
答案 0 :(得分:0)
我一开始误读了你的请求。你真正想要的只是来自tbl1的所有tbl2中没有匹配的记录。无需加入。只需NOT EXISTS
或NOT 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