通过比较可空列连接三个表
Posted
技术标签:
【中文标题】通过比较可空列连接三个表【英文标题】:Joining three tables with comparing nullable columns 【发布时间】:2020-06-14 10:47:30 【问题描述】:我有 3 张桌子: 表 1:COL1(主要)、COL2 表 2:COL1(主要,可空),COL2 表3:COL1(Primary)、COL2(外键引用表1)、COL3(外键引用表2)、COL4
现在我想加入所有 3 个表并检索表的所有值。 我有以下连接查询来获取数据
select Table1.COL1,
Table1.COL2,
Table2.COL1,
Table2.COL2,
Table3.COL1,
Table3.COL4
from Table1
INNER JOIN Table3 ON Table1.COL1=Table3.COL2
INNER JOIN Table2 ON Table3.COL3=Table2.COL1;
由于 Table2.COL1 可以为空,因此没有检索到任何值,它为 NULL。 如何操作我的查询,以便即使 Table2.COL1 为 NULL 且该列中的所有值都为 NULL,我也可以检索所有列?
【问题讨论】:
COL1 (Primary, Nullable) mysql 不允许使用可为空的列作为主键(生成错误消息All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead
)。
MySQL 是否允许 COL1 唯一(因为它是表 3 中的外键)
UNIQUE 索引对字段可空性没有限制。但是当索引键的任何部分为 NULL 时,则根本不会检查整个记录的唯一性。
即使 Table2.COL1 为 NULL 且该列中的所有值都为 NULL,我如何操作查询以便检索所有列? FROM table2 LEFT JOIN table3 [LEFT | INNER] JOIN table1
.
所以对于 Table3: COL3 (Foreign key reference Table 2) 当 Table 2 : COL1 (Primary, Nullable) 是 NULL空?
【参考方案1】:
LEFT JOIN 用于在加入表时处理空值。您可以尝试以下查询 -
select Table1.COL1,
Table1.COL2,
Table2.COL1,
Table2.COL2,
Table3.COL1,
Table3.COL4
from Table2
LEFT JOIN Table3 ON Table3.COL3=Table2.COL1
LEFT JOIN Table1 ON Table1.COL1=Table3.COL2;
【讨论】:
我得到了同样的结果。没有记录被填充。以上是关于通过比较可空列连接三个表的主要内容,如果未能解决你的问题,请参考以下文章
添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?