[英]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.