首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有空值的左键上的Sql left join

具有空值的左键上的Sql left join
EN

Stack Overflow用户
提问于 2018-08-01 02:27:55
回答 4查看 35.7K关注 0票数 5

我有一个关于带有空值的键的连接的问题。

假设我有一个表格t,它将在左边。(id是主键,sub_id是与右表联接的键。)

代码语言:javascript
复制
    id sub_id value
    1  3       23
    2  3       234
    3  2       245
    4  1       12
    5  null    948
    6  2       45
    7  null    12

我有另一张桌子m,在右边。(t.sub_id = m.id)

代码语言:javascript
复制
    id feature
    1  9       
    2  8       
    3  2       
    4  1       
    5  4    
    6  2       
    7  null

现在我想使用

代码语言:javascript
复制
    select * from t left join m on t.sub_id = m.id   

它将返回什么结果?左键中的Null值会影响结果吗?我希望所有null左键行都不显示在我的结果中。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-01 02:30:42

left join非常简单。当on子句的计算结果为"true“时,它将保留第一个(左)表中的所有行以及第二个(右)表中的所有行。

on子句的计算结果为"false“或NULL时,left join仍然保留第一个表中具有第二个表的NULL值的所有行。

如果sub_ididNULL,则on子句的计算结果为NULL,因此它使用NULL占位符保留第一个表中的所有行,第二个表中的列使用NULL占位符。

票数 12
EN

Stack Overflow用户

发布于 2018-08-01 02:31:12

根据定义,左连接将包括连接左侧的所有id,无论id在另一个表中是否有有效的映射,如果没有,它将与NULL相关。

如果你只想使用有效的链接,你需要使用INNER JOIN

票数 1
EN

Stack Overflow用户

发布于 2018-08-01 02:40:34

我认为inner join不是一个解决方案,因为right中有键,而他不希望将它放在连接表中。您仍然可以执行left join,然后添加一条语句来删除所有keys = null

你可以试试这个

代码语言:javascript
复制
SELECT * 
FROM t 
LEFT JOIN m ON t.sub_id = m.id
WHERE t.sub_id != NULL

或者

代码语言:javascript
复制
SELECT * 
FROM t 
LEFT JOIN m ON t.sub_id = m.id  
WHERE t.sub_id IS NOT NULL 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51619861

复制
相关文章

相似问题

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