一直试图弄清楚这一个并且挣扎。这个问题与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
短语,并且在晚上的大部分时间里都试图找到答案,但无济于事。有人可以帮忙吗?
答案 0 :(得分:2)
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
答案 1 :(得分:0)
答案 2 :(得分:0)
SELECT x.*
FROM table1 x
LEFT
JOIN
( SELECT * FROM table2
UNION
SELECT * FROM table3
) y
ON y.email = x.email
AND y.module = x.module
WHERE y.module IS NULL;