首页 > 解决方案 > 如何获取MYSQL中多个相关表中至少一个表中的数据

问题描述

我需要有关 SQL 的问题的帮助。

我有三个表,Table1、Table2、Table3,它们都有一个“电子邮件”字段,它们相互关联。

另一方面,我有一个包含电子邮件列表的数组,我必须检查它们是否在其中一个表中。这些电子邮件还将它们保存在一个用逗号分隔的字符串中,并带有各自的引号,以便在 IN (....) 中使用它:

$emails = ("'email1@example.com', 'email2@example.com', ....");

SELECT * 
FROM Table t1 
INNER JOIN Table2 t2 ON t1.email = t2.email 
INNER JOIN Table3 t3 ON t1.email = t3.email 
WHERE (t1.email IN ($ emails)) OR (t2.email IN ($ emails) ) OR (t3.email IN ($ emails));

在前面的示例中,我意识到在执行 INNER JOIN 时,我通过电子邮件字段匹配表,该字段在所有表中都没有值。可能是电子邮件不在某个表中,但在另一个表中是的,所以我需要一个 SQL 查询,以便获得 3 个表中的任何一个中的电子邮件。

有人告诉我,我制作了 emails 数组的临时表,然后在我可以得到它的表之间进行 LEFT JOIN,但我不知道该怎么做。

你能给我一个如何解决这个问题的想法吗?

提前致谢。

标签: mysqlsql

解决方案


你需要使用UNION,而不是JOIN

SELECT email, "Table1" AS whichTable
FROM Table1
WHERE email in ($email)
UNION
SELECT email, "Table2" AS whichTable
FROM Table2
WHERE email in ($email)
UNION
SELECT email, "Table3" AS whichTable
FROM Table3
WHERE email in ($email)

在所有查询中使用SELECT *假设所有表都具有相同顺序的相似列。如果没有,您需要在每个查询中明确列出列。


推荐阅读