MySQL选择不同的左连接?

Gre*_*ina 5 mysql sql select distinct left-join

我正在尝试获取company_id没有公司级别注释的's列表。但是,该公司可能有位置级别的注释。

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
Run Code Online (Sandbox Code Playgroud)

我希望我的结果表是这样的:

company_id  name
1           Foo
3           Baz
Run Code Online (Sandbox Code Playgroud)

更新

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)
Run Code Online (Sandbox Code Playgroud)

迈克修订后的接受答案

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)
        )
    );
Run Code Online (Sandbox Code Playgroud)