[英]MySQL Select Distinct with Left Join?
我想獲得一個沒有公司級筆記的company_id
列表。 但是,該公司可能有位置級別的說明。
company
-------------------------
company_id name deleted
1 Foo 0
2 Bar 0
3 Baz 0
location
-----------------------
location_id company_id
6 1
7 2
8 3
note
-----------------------------------------
note_id company_id location_id deleted
10 2 6 0 // location-level note
11 1 7 0 // location-level note
12 null 8 0 // location-level note
13 2 null 0 // company-level note
我希望我的結果表是這樣的:
company_id name
1 Foo
3 Baz
更新
Foo
/ company_id = 1
沒有公司級別的注釋,因為該注釋還具有location_id
,這使其成為位置級別注釋。 公司級別的票據是僅鏈接到公司(而非位置)的票據。
更新結束
我已經嘗試過做這樣的事情,但是它返回一個空集,所以我不確定它是否有效,並且沒有任何公司沒有公司級別的注釋或者我做錯了什么。
SELECT DISTINCT
c.company_id,
c.name
FROM company AS c
LEFT JOIN note AS n
ON c.company_id = n.company_id
WHERE
c.deleted = 0 AND
n.deleted = 0 AND
n.location_id IS NOT NULL AND
n.location_id != 0 AND
c.company_id = (SELECT MAX(company_id) FROM company)
SELECT
company_id,
name
FROM company
WHERE
deleted = 0 AND
company_id NOT IN (
SELECT DISTINCT
c.company_id
FROM company AS c
INNER JOIN note AS n
ON c.company_id = n.company_id
WHERE (
n.deleted = 0 AND
(n.location_id IS NULL OR
n.location_id = 0)
)
);
考慮這一點的最簡單方法是首先找到所有具有公司級別備注的公司,您可以這樣做
select distinct c.company_id
from company c
inner join notes n
on c.company_id = n.company_id
where n.location_id is null;
然后只需從公司中刪除這些公司選擇:
select company_id,
name
from company
where company_id not in (select distinct c.company_id
from company c
inner join notes n
on c.company_id = n.company_id
where n.location_id is null);
*已更新以使用內部聯接而不是逗號分隔的聯接。
SELECT DISTINCT c.*
FROM company c
LEFT
JOIN note n
ON n.company_id = c.company_id
AND n.location_id IS NULL
WHERE n.note_id IS NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.