左关联的一条SQL语句(mysql):

SELECT *
FROM b 
    LEFT JOIN a
    ON a.trans_id=b.id
    AND a.target_col = 'date'
WHERE a.target_col IS NULL

说明:ba是一对多的关系。

初看该语句,发现条件中既是a.target_col='date'又是a.target_col is null,似乎有矛盾。
其实不是,该语句没有问题。分析如下:

语句分析:
1)查找ba的左关联数据;
2)因为ba是一对多的关系,通过增加条件a.target_col = 'date',限制关联这一条数据;
3)如果a中没有target_col='date'的记录,则关联出一条null的记录;
4)最后通过where条件,过滤出ab有关联关系,且a中未配置target_col='date'的记录。

比如有数据:
未命名文件(2).png

SELECT * FROM t1
LEFT JOIN t2
ON t1.name = t2.name
AND t2.type = 'b1'
WHERE t2.name IS NULL

过滤出t1中的记录a3a3t2中,没有typeb1的记录。


anh6
87 声望1 粉丝