整晚都在努力解决这个问题。这个问题与 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 的用户,我希望查询返回以下结果,就像两个模块(401 和 404)一样未出现在其他两个表中的任何一个中:
| 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/