当前位置:  开发笔记 > 编程语言 > 正文

内部联接空值

如何解决《内部联接空值》经验,为你挑选了2个好方法。

我不确定我是否在逻辑上犯了错误.

如果我有一个查询,我做一个空值的内连接,我总是得不到结果,还是会忽略连接并成功?例

user { id PK, name NVARCHAR NOT NULL, banStatus nullable reference }

如果我写和u.banStatus我将不会收到任何行?

select * from user as u
join banstatus as b on u.banStatus=b.id
where id=1

Mark Byers.. 49

如果连接为null,则不会获取该行,因为NULL不能等于任何内容,甚至是NULL.

如果将其更改为LEFT JOIN,那么您将获得该行.

使用内部联接:

select * from user as u
join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'

使用左连接:

select * from user as u
left join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'
2, 'NULL', , ''

使用此测试数据:

CREATE TABLE user (id int, banstatus nvarchar(100));
INSERT INTO user (id, banstatus) VALUES
(1, '1'),
(2, 'NULL');

CREATE TABLE banstatus (id int, text nvarchar(100));
INSERT INTO banstatus (id, text) VALUES
(1, 'Banned');

我不需要测试数据或其他任何其他构造(是的,你不会得到行),但对未来的读者有好处.+ 1&接受. (2认同)


Daniel Vassa.. 8

当你这样做时INNER JOIN,NULL值与任何东西都不匹配.甚至没有彼此.这就是为什么您的查询不返回任何行.(来源)



1> Mark Byers..:

如果连接为null,则不会获取该行,因为NULL不能等于任何内容,甚至是NULL.

如果将其更改为LEFT JOIN,那么您将获得该行.

使用内部联接:

select * from user as u
join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'

使用左连接:

select * from user as u
left join banstatus as b on u.banStatus=b.id

1, '1', 1, 'Banned'
2, 'NULL', , ''

使用此测试数据:

CREATE TABLE user (id int, banstatus nvarchar(100));
INSERT INTO user (id, banstatus) VALUES
(1, '1'),
(2, 'NULL');

CREATE TABLE banstatus (id int, text nvarchar(100));
INSERT INTO banstatus (id, text) VALUES
(1, 'Banned');


我不需要测试数据或其他任何其他构造(是的,你不会得到行),但对未来的读者有好处.+ 1&接受.

2> Daniel Vassa..:

当你这样做时INNER JOIN,NULL值与任何东西都不匹配.甚至没有彼此.这就是为什么您的查询不返回任何行.(来源)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有