我有两个表,一个映射和一个数据表,我想查找所有没有任何关联数据的映射
例如:
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,但都无济于事。无论我如何设置,我都会得到一些确实有数据的地图,或者得不到一些没有数据的地图。
答案 0 :(得分:1)
无需分组,左联接就足够了:
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
)
答案 1 :(得分:1)
您不需要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