我正在尝试连接两个表,其中正确的表可能是空的。如果它是空的,我想要左边表中的所有记录。如果它不是空的,那么我希望左边表中的所有记录都不存在于右表中。就像这样:文恩图
此外,我还需要过滤结果,以便使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中得到所有条目--与上面的完全相同(不太好)
我该怎么办才能做这个手术?
发布于 2017-06-14 10:09:09
这是一种推测,但您可能需要向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发布于 2017-06-14 10:09:00
一开始我误解了你的要求。实际上,您需要的是来自tbl1的所有记录,这些记录在tbl2中没有匹配。不需要加入。只是一个NOT EXISTS或NOT IN子句。
SELECT id, name
FROM tbl1
WHERE id IS NOT IN (SELECT fk1 FROM tbl2);https://stackoverflow.com/questions/44541521
复制相似问题