我不确定我是否在逻辑上犯了错误。
如果我有一个查询并且我使用空值进行内部联接,我将始终不会获得任何结果,还是会忽略联接并成功执行?例
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');