我不确定我是否在逻辑上犯了错误。
如果我有一个查询并且我使用空值进行内部连接,我会始终得不到结果还是会忽略连接并成功?例子
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
最佳答案
如果连接为 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');
关于sql - 空值内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123006/