MySQL多个加入/子查询问题

时间:2009-12-27 08:00:33

标签: sql mysql join subquery duplicates

大约一年以来,我们一直允许用户使用非唯一的用户名和/或电子邮件地址登录(尽管每个用户都有唯一的ID)。虽然系统优雅地处理重复的用户名/电子邮件,但我们决定最终强制使用唯一的用户名和电子邮件地址。我的任务是在MySQL中生成一个表,它将显示重复项和使用重复ID的表(即表依赖于副本的用户ID,使用1表示true,0表示false)。一旦重复数据被标记为删除,该表将用作参考。简而言之,我希望生成一个类似这样的表:

       | User_id |     用户名|     电子邮件|     Exists_in_Table1 |     Exists_in_Table2 |     Exists_in_Table3 |      
       -------------------------------------------------- -------------------------------------------------- -------      
       | 0001 ..... |     TEST1 ......... |     电子邮件。|     0 .......................... |     0 .......................... |     1 .......................... |      
       |技术..... |     TEST2 ......... |     电子邮件。|     0 .......................... |     1 .......................... |     1 .......................... |      
       | 0003 ..... |     TEST3 ......... |     电子邮件。|     1 .......................... |     1 .......................... |     1 .......................... |   


如何实现这一点无关紧要。由于我的SQL技能有些缺乏,我打算使用PHP和一些简单的SQL查询以编程方式执行此操作。但是,我相信单个SQL查询或一系列查询(不使用PHP)是最干净的方法。我知道如何查询重复项,但我似乎无法弄清楚如何查询多个表并以适当的方式通过用户ID加入它们。我感谢任何和所有的帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

SELECT u.User_id, u.Username, u.Email,
 IF(t1.User_id IS NULL, 0, 1) AS Exists_in_Table1,
 IF(t2.User_id IS NULL, 0, 1) AS Exists_in_Table2,
 IF(t3.User_id IS NULL, 0, 1) AS Exists_in_Table3
FROM Users u
LEFT OUTER JOIN Table1 t1 USING (User_id)
LEFT OUTER JOIN Table2 t2 USING (User_id)
LEFT OUTER JOIN Table3 t3 USING (User_id);