使用 mySQL 连接 3 个表,其中包含 1 个查询


Joining 3 tables with mySQL with 1 query

这在不同的实例中被问过和回答过,但我所看到的一切都不太适合我的问题。

问题:我需要同时从中提取数据以比较和检索信息。所有 3 个表都包含一个"电子邮件"列。现在,来自 table1 的用户电子邮件可能与 table2 和 table3 中的同一用户的电子邮件匹配,具体取决于用户的状态。或者来自表1的电子邮件将仅与表2或表3中的电子邮件匹配,具体取决于用户的状态。例如,用户可能具有红色状态(用户将显示在表 2 中)、蓝色状态(用户将显示在表 3 中)或同时具有红色和蓝色状态(用户将显示在表 2 和表 3 中)。

需要什么:将来自表1的电子邮件与表2和表3

中的电子邮件进行比较,并返回给定用户的区域值,该值记录在表2和表3中,但不在表1中。我知道。令人愉悦的数据架构!无论哪种方式,我都能够非常成功地将表1 JOIN到表2,但我不确定如何使用表3打JOIN

下面是 2 个表的查询:

SELECT * FROM table1
INNER JOIN table2
ON table2.email = table1.email
WHERE month = 'numberHere' ORDER BY submitdate DESC

当我简单地添加另一个INNER JOIN时,我的代码不会中断,但它也没有给我任何要显示的行。因此,尽管网络上有许多工作示例,但下面的代码不起作用:

SELECT * FROM table1
INNER JOIN table2
ON table2.email = table1.email
INNER JOIN table3
ON table3.email = table2.email
WHERE month = 'numberHere' ORDER BY submitdate DESC

在任何情况下都要匹配来自table1的行,并且仅在其他表的行是时匹配它们,您必须使用 LEFT JOIN ,将table2table3table1连接(而不是table2table1连接,table3tabel2

):
SELECT * FROM table1
LEFT JOIN table2
ON table2.email = table1.email
LEFT JOIN table3
ON table3.email = table1.email

通过这种方式,即使其他表中没有匹配项,也可以从table1中选择值。

查看有关 SQL 联接

的更多信息:不同的 SQL 联接

您需要

使用 LEFT JOIN ,以便即使其中一个表中没有匹配的行,连接也会成功。

SELECT * FROM table1
LEFT JOIN table2
    ON table2.email = table1.email
LEFT JOIN table3
    ON table3.email = table2.email
WHERE month = 'numberHere'
    AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)
ORDER BY submitdate DESC

附加条件筛选出任一表中不匹配的行。