左关联的一条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
说明:b
和a
是一对多的关系。
初看该语句,发现条件中既是a.target_col='date'
又是a.target_col is null
,似乎有矛盾。
其实不是,该语句没有问题。分析如下:
语句分析:
1)查找b
和a
的左关联数据;
2)因为b
和a
是一对多的关系,通过增加条件a.target_col = 'date'
,限制关联这一条数据;
3)如果a
中没有target_col='date'
的记录,则关联出一条null的记录;
4)最后通过where
条件,过滤出a
和b
有关联关系,且a
中未配置target_col='date'
的记录。
比如有数据:
SELECT * FROM t1
LEFT JOIN t2
ON t1.name = t2.name
AND t2.type = 'b1'
WHERE t2.name IS NULL
过滤出t1
中的记录a3
,a3
在t2
中,没有type
为b1
的记录。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。