左联接没有得到预期的结果

时间:2019-02-03 05:47:04

标签: mysql

在这种情况下,我需要有关左联接的帮助。

表创建语句:

 create temporary table `temp_table_A` ( `txn_dt` date not null, `id` int not null, `key` varchar(32) NOT NULL, `val` int NOT NULL, PRIMARY KEY (`txn_dt`, `id`));
 create temporary table `temp_table_B` ( `txn_dt` date not null, `id` int not null, `grade` varchar(32) NOT NULL ,  PRIMARY KEY (`txn_dt`, `id`));

数据填充语句:

 insert into temp_table_A values ( 20190102,  1 , 'AA' , 10 );
 insert into temp_table_A values ( 20190102, 2 , 'BB' , 11 );
 insert into temp_table_A values ( 20190102, 3 , 'CC' , 12 );

 insert into temp_table_B values ( 20190103, 2 , 'CAT1');
 insert into temp_table_B values ( 20190103, 4 , 'CAT2'  );

用于获取数据的查询:

select key, val , grade
from 
    temp_table_A a
        LEFT JOIN
    temp_table_B b on a.id = b.id 
where a.txn_dt = 20190102 
and b.txn_dt = 20190103
and a.key = 'AA'

预期结果:

key           val        grade
----------   ----------  -------
AA           10          null

Actual results :
No rows returned

1 个答案:

答案 0 :(得分:0)

b.txn_dt为空。 b.txn_dt上的条件将从结果集中删除您的预期结果。您需要

and (b.txn_dt = 20190103 or b.txn_dt is null)

我没有测试它,但替代方法可能是将b.txn_id上的条件移入联接:

LEFT JOIN temp_table_B b on (a.id = b.id and b.txn_dt = 20190103)