sql - 空值内连接

标签 sql mysql tsql sqlite

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

如果我有一个查询并且我使用空值进行内部连接,我会始终得不到结果还是会忽略连接并成功?例子

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/

相关文章:

php - 如何获取行然后显示在选项上

sql - T-SQL [UNION ALL] 从查询结果中删除记录

mysql - SQL 将行转换为列,无需聚合或透视

sql - 将 F# 连接到 SQL 时出错

mysql - 将两个表相加的结果相加

mysql - 在 MySQL 中按 RAND() 排序

mysql - 使用子查询的返回结果对 SQL 查询进行排序

mysql - 尝试插入belongsToMany关系

c# - T-Sql 选择并将许多行和列连接成一行和一列

java - 我如何使用 HQL/Hibernate 验证我的所有表都是空的?