rca*_*a86 5 mysql group-by notin
我为此使用 MySQL。
(我正在删除不相关的连接以使这一点更清晰)
我正在尝试选择公司地址,按 company_id 分组,但如果整个用户在特定国家/地区有任何地址(ID 242),则排除整个用户
所以我尝试的第一个查询是:
SELECT c.company_id
FROM companies c
NATURAL JOIN addresses a
WHERE a.country_id != 15
GROUP BY c.company_id
Run Code Online (Sandbox Code Playgroud)
据我了解,这首先执行选择,然后排除country_id为15的行,然后返回剩余行的company_id,这些行是不同的,因为它们已分组。
因此,这会返回至少在 15 国以外拥有一个地址的任何公司。我需要排除在该国家/地区拥有地址的任何公司。
我怎样才能做到这一点?
小智 3
SELECT c.company_id
FROM companies c
NATURAL JOIN addresses a
WHERE NOT EXISTS
(SELECT * FROM addresses a1
WHERE c.company_id = a1.company_id AND a1.country_id = 15)
GROUP BY c.company_id
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用另一个联接而不是存在子查询。使用此方法可能会获得更好的性能,因为子查询仅解析一次。
SELECT c2.company_id
FROM (SELECT c.company_id
FROM companies c
NATURAL JOIN addresses a
GROUP BY c.company_id) AS c2
LEFT JOIN addresses a2
ON a2.company_id = c2.company_id AND a2.country_id = 15
WHERE a2.company_id IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4198 次 |
| 最近记录: |