首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL连接不等于空右表

问MySQL连接不等于空右表
EN

Stack Overflow用户
提问于 2017-06-14 10:01:33
回答 2查看 45关注 0票数 0

我正在尝试连接两个表,其中正确的表可能是空的。如果它是空的,我想要左边表中的所有记录。如果它不是空的,那么我希望左边表中的所有记录都不存在于右表中。就像这样:文恩图

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

我想这是个很简单的任务

代码语言:javascript
复制
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中得到所有条目--与上面的完全相同(不太好)

我该怎么办才能做这个手术?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-14 10:09:09

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

代码语言:javascript
复制
SELECT tbl1.id, tbl1.name
FROM tbl1
LEFT JOIN tbl2
    ON tbl1.id = tbl2.fk1
WHERE tbl1.free = 1 AND tbl2.fk1 IS NULL
票数 0
EN

Stack Overflow用户

发布于 2017-06-14 10:09:00

一开始我误解了你的要求。实际上,您需要的是来自tbl1的所有记录,这些记录在tbl2中没有匹配。不需要加入。只是一个NOT EXISTS或NOT IN子句。

代码语言:javascript
复制
SELECT id, name 
FROM tbl1
WHERE id IS NOT IN (SELECT fk1 FROM tbl2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44541521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档