[英]Left outer join, find all from left having no occurrences in right table, mysql
有两个表,一个映射和一个数据表,我想查找所有没有任何关联数据的映射
例如:
map data
============ ===============
mapId | name mapId | value
------------ ---------------
1 A 1 x
2 B 1 y
3 C 2 z
对于这种情况,我想返回mapId 3 / C,因为它存在于映射表中,但在数据表中没有记录
我该如何查询? 我已经尝试了每个组的组合,并且在想想的地方,我得到的最接近的是
SELECT map.name
FROM map
LEFT OUTER JOIN data on data.mapId = map.mapId
GROUP BY data.mapId
HAVING max(data.value) is null
我也尝试通过map.mapId进行分组,并让count(data.dataId)= 0,但都无济于事。 无论我如何设置,我都会得到一些确实有数据的地图,或者得不到一些没有数据的地图。
无需分组,左联接就足够了:
SELECT map.*
FROM map LEFT JOIN data
on data.mapId = map.mapId
WHERE data.mapId is null
另一种使用NOT EXISTS
做到这一点的方法:
SELECT map.*
FROM map
WHERE NOT EXISTS (
SELECT 1 FROM data
WHERE data.mapId = map.mapId
)
您无需group by
即可实现这一目标。 可以有一个多行mapId
数据我添加distinct
。
select
distinct m.mapId, m.name
from map m
left join data d
on m.mapId = d.mapId
where d.mapId is null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.