我不确定我是否在逻辑上犯了错误.
如果我有一个查询,我做一个空值的内连接,我总是得不到结果,还是会忽略连接并成功?例
user { id PK, name NVARCHAR NOT NULL, banStatus nullable reference }
Run Code Online (Sandbox Code Playgroud)
如果我写和u.banStatus我将不会收到任何行?
select * from user as u
join banstatus as b on u.banStatus=b.id
where id=1
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 49
如果连接为null,则不会获取该行,因为NULL不能等于任何内容,甚至是NULL.
如果将其更改为LEFT JOIN,那么您将获得该行.
使用内部联接:
select * from user as u
join banstatus as b on u.banStatus=b.id
1, '1', 1, 'Banned'
Run Code Online (Sandbox Code Playgroud)
使用左连接:
select * from user as u
left join banstatus as b on u.banStatus=b.id
1, '1', 1, 'Banned'
2, 'NULL', , ''
Run Code Online (Sandbox Code Playgroud)
使用此测试数据:
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');
Run Code Online (Sandbox Code Playgroud)
这是null的内部连接(Oracle语法):
select *
from user
uu
join banstatus
bb
on uu.banstatus = bb.id
or
uu.banstatus is null and bb.id is null
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48959 次 |
最近记录: |