mysql - 基于另一个表的值加入 sql 查询(在一个查询中)

标签 mysql sql

假设我有两个表 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 EXISTSNOT IN 非常相似(尽管我不推荐后者,因为当存在 NULL 值)。

关于mysql - 基于另一个表的值加入 sql 查询(在一个查询中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411744/

相关文章:

php - 如何从 SQL View 中进行 SELECT? (一般错误: 1615 Prepared statement needs to be re-prepared)

mysql - 有没有办法获取变量并将它们添加为 SQL 中左连接后的列?

MYSQL:在值不是特定值的情况下获取字段的平均值

mysql - 查询 2 列,其中值从未在任一列中多次出现

mysql - 如何获取成员(member)的帖子?

sql - 为结果表提供列名

mysql - 有没有办法在 MySQL 中为每个数据库设置密码?

php - cakephp条件无法列出具有上线值的条件

mysql 找到匹配的键与不匹配的值

php - 使用可选参数构建 SQL 语句