mysql - 如何从 MySQL 表中获取与其他两个表不匹配的结果

标签 mysql sql

整晚都在努力解决这个问题。这个问题与 MySQL 数据库有关。

我需要SELECT一个表中没有出现在其他两个表中的所有记录。

例如,取下表:

表1

| email     |  module | name    |
| a@ba.com  |  401    | Chris   |
| a@ba.com  |  402    | Chris   |
| a@ba.com  |  403    | Chris   |
| a@ba.com  |  404    | Chris   |
| a@ba.com  |  405    | Chris   |
| z@xy.com  |  401    | Anna    |
| z@xy.com  |  402    | Anna    |
| z@xy.com  |  403    | Anna    |
| z@xy.com  |  404    | Anna    |
| z@xy.com  |  405    | Anna    |

表2

| email     | module | requested |
| a@ba.com  | 402    | Yes       |
| a@ba.com  | 403    | No        |
| z@xy.com  | 403    | Yes       |

表3

| email     | module    | received |
| a@ba.com  | 405       | Yes      |
| z@xy.com  | 401       | No       |
| z@xy.com  | 404       | No       |

我需要能够搜索这三个表以找到电子邮件地址匹配的记录。然后我想从 table1 中选择所有行,其中模块对于该表是唯一的,即它没有出现在其他两个表中的任何一个中。例如,对于名为 Chris 的用户,我希望查询返回以下结果,就像两个模块(401404)一样未出现在其他两个表中的任何一个中:

| email     | module  | name   |
| a@ba.com  | 401     | Chris  |
| a@ba.com  | 404     | Chris  |

我试过使用不同类型的 JOIN 短语,并且花了大半个晚上试图找到答案,但无济于事。这里有人可以帮忙吗?

最佳答案

LEFT JOIN 应该可以在 MySQL 中获得良好的性能:

SELECT t1.email
     , t1.module
     , t1.name
FROM table1 t1 LEFT JOIN table2 t2 ON t1.email = t2.email 
                                  AND t1.module = t2.module
               LEFT JOIN table3 t3 ON t1.email = t3.email
                                  AND t1.module = t3.module
WHERE t2.email IS NULL 
  AND t3.email IS NULL

关于mysql - 如何从 MySQL 表中获取与其他两个表不匹配的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520376/

相关文章:

php - 我可以在 PHP 中混合使用 MySQL API 吗?

c# - 带破折号的 DBF 文件不起作用

php - 为什么 echo 只打印 PHP 数组中的一个值?

sql - 学习理解语法的语法

mysql - 导出和导入 mysql 数据库的最佳实践是什么?

SQL查询仅获取另一列中只有1个值的那些行

php - 这个有 2 个联合的 sql 可以最小化为没有联合吗?

mysql - 在 mysql 中创建 date_from 和 date_to 列

mysql - 我如何滞后 MySQL 中的列?

c# - 将多个 Include() 与嵌套 Select() 结合使用时出现 EntityCommandExecutionException