簡體   English   中英

左外部聯接,從左查找所有沒有出現在右表,mysql

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM