我不确定我是否在逻辑上犯了错误.
如果我有一个查询,我做一个空值的内连接,我总是得不到结果,还是会忽略连接并成功?例
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
值与任何东西都不匹配.甚至没有彼此.这就是为什么您的查询不返回任何行.(来源)
如果连接为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');
当你这样做时INNER JOIN
,NULL
值与任何东西都不匹配.甚至没有彼此.这就是为什么您的查询不返回任何行.(来源)