Php 通过一个查询将3个表与mySQL连接起来

Php 通过一个查询将3个表与mySQL连接起来,php,mysql,join,Php,Mysql,Join,这在不同的情况下被问到和回答,但我所看到的并不能完全解决我的问题 问题:我需要同时从3个表中提取数据,以比较和检索信息。所有3个表都包含一个“电子邮件”列。现在,表1中用户的电子邮件可能与表2和表3中相同用户的电子邮件相匹配,具体取决于用户的状态。或者,来自表1的电子邮件将仅与表2或表3中的电子邮件匹配,这取决于用户的状态。例如,用户可能具有红色状态(用户将显示在表2中)、蓝色状态(用户将显示在表3中)或红色和蓝色(用户将同时显示在表2和表3中) 所需内容:需要将表1中的电子邮件与表2和表3中的

这在不同的情况下被问到和回答,但我所看到的并不能完全解决我的问题

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

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

以下是对2个表的查询:

SELECT * FROM table1
INNER JOIN table2
ON table2.email = table1.email
WHERE month = 'numberHere' ORDER BY submitdate DESC
当我简单地添加另一个
内部连接时
我的代码不会按顺序中断,但也不会给我任何要显示的行。因此,尽管web上有许多工作示例,但下面的代码仍然不起作用:

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

您需要使用
左联接
,这样即使其中一个表中没有匹配的行,联接也会成功

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

附加条件过滤掉两个表中都不匹配的行。

您需要使用
左联接
,这样即使其中一个表中没有匹配的行,联接也会成功

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

附加条件过滤掉两个表中不匹配的行。

要在任何情况下匹配
table1
中的行以及其他表中的行(如果是),必须使用
LEFT JOIN
,将
table2
table3
table1
(非
表2
表1
表3
表2
):

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
通过这种方式,您可以从
表1
中选择值,即使在其他表中没有匹配项


有关SQL联接的更多信息,请参见:

要在任何情况下匹配
表1
中的行以及其他表中的行(如果它们是),必须使用
左联接
,将
表2
表3
表1
(非
表2
表1
表3
表2
):

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


查看有关SQL联接的更多信息:

您需要发布所有3个表的表结构您需要发布所有3个表的表结构返回到学习SQL I go。;p非常感谢。工作非常好。返回到学习SQL I go。;p非常感谢。工作非常好。