在下面的示例中,我期望输出 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)
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)
| 归档时间: |
|
| 查看次数: |
1032 次 |
| 最近记录: |