假设我有两个表 A 和 B,其中
A 是包含 id、name、created、modified 列的国家/地区表
包含很多国家
B 是具有列 id、first_name、last_name、email、country_id、created、modified 的表 users
包含一组通过外键 country_id 链接到国家/地区的用户
获取所有没有关联电子邮件地址“myemail@test.com”的用户的国家/地区的最有效查询是什么?
我试过类似下面的方法,但没有用:
SELECT DISTINCT
c.*
FROM
countries c
LEFT JOIN
users u ON u.country_id = c.id
WHERE
u.email <> 'myemail@test.com'
感谢您的帮助
注意 我还尝试将条件放在 ON 子句中的电子邮件列上,但也不起作用
最佳答案
left join
没问题,你只需要正确设置它:
SELECT c.*
FROM countries c LEFT JOIN
users u
ON u.country_id = c.id AND u.email = 'myemail@test.com'
WHERE u.country_id IS NULL;
在性能方面,这应该与 NOT EXISTS
和 NOT IN
非常相似(尽管我不推荐后者,因为当存在 NULL
值)。
关于mysql - 基于另一个表的值加入 sql 查询(在一个查询中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411744/