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

如果我有一个查询并且我使用空值进行内部联接,我将始终不会获得任何结果,还是会忽略联接并成功执行?例

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');

09-11 19:51