mysql 内连接,连接中带有空值

Ali*_*Ali 3 mysql join

在下面的示例中,我期望输出 id 为 1、4、6 和 7。但我只得到 1,不知道为什么。默认情况下,我们必须对 mysql 中的每个连接使用 IFNULL 吗?

-- create table
create table t1(col1 int, col2 char(1), col3 varchar(5), col4 date);  
create table t2(col1 int, col2 char(1), col3 varchar(5), col4 date);  

-- insert dummy data
insert into t1 values (1,'m', 'name1', '2000-1-1');  
insert into t2 values (1,'m', 'name1', '2000-1-1');  

insert into t1 values (2,'f', 'name2', '2000-1-1');  
insert into t2 values (2,'f', 'name2', null);  

insert into t1 values (3,'f', null, null);  
insert into t2 values (3,'f', 'name3', null);  

insert into t1 values (4,'f', null, '2000-1-1');  
insert into t2 values (4,'f', null, '2000-1-1');  

insert into t1 values (5,'f', null, '2000-1-1');  
insert into t2 values (5,'f', 'name5', null);  

insert into t1 values (6,'f', null, null);  
insert into t2 values (6,'f', null, null);  

insert into t1 values (7,null, 'name7', '2000-1-1');  
insert into t2 values (7,null, 'name7', '2000-1-1');  

-- select query with inner join  
select a.col1  
from t1 a  
inner join t2 b on b.col2 = a.col2  
and b.col3 = a.col3  
and b.col4 = a.col4  
Run Code Online (Sandbox Code Playgroud)

Dyl*_* Su 5

null无法使用 进行匹配=

演示

mysql> SELECT null = null, null <=> null;
+-------------+---------------+
| null = null | null <=> null |
+-------------+---------------+
|        NULL |             1 |
+-------------+---------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

您可以使用<=>来替换=.

select a.col1
from t1 a
inner join t2 b on b.col1 <=> a.col1
and b.col2 <=> a.col2
and b.col3 <=> a.col3
and b.col4 <=> a.col4;
Run Code Online (Sandbox Code Playgroud)