MySQL加入以在WHERE语句中包含不匹配的记录

时间:2014-08-08 17:39:37

标签: php mysql sql join

如果存在,我需要从两个表中输出数据。

我想选择表1中的所有记录,以便使用动态html表在PHP Recordset中显示。我还需要显示表2中的一些数据(如果存在)。我现有的查询没有从两个表中选择我需要的所有数据。

表1

EmpNum     FirstName   EmpType
541        Robert      88
222        Samuel      88
521        Anthony     88

表2

ID   SecretKey     NickName
541  6565          Bob
222  9999          Sam

我也想"加入"此数据与另一个 可能或不可能 的表格匹配。这就是我的结果。

SELECT Table1.EmpNum, Table1.FirstName, Table2.ID, Table2.SecretKey, Table2.NickName FROM Table1, Table2 WHERE Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'

此查询从表格数据中省略了EmpNum 521,因为我的WHERE子句找不到匹配项。

我希望从表1中显示所有记录,然后如果存在匹配则附加表2中的数据。

示例 DESIRED 输出:

EmpNum     FirstName   EmpType     SecretKey     NickName
541        Robert      88          6565          Bob
222        Samuel      88          9999          Sam
521        Anthony     88

在上面的示例中,即使表2中没有记录,Anthony仍会显示。

如何更改联接以实现此目的。

2 个答案:

答案 0 :(得分:3)

使用外部联接 -

SELECT Table1.EmpNum, Table1.FirstName, Table2.ID, Table2.SecretKey, Table2.NickName 
FROM Table1
LEFT OUTER JOIN Table2 
ON Table1.EmpNum = Table2.ID
WHERE Table1.EmpType = '88'

您可以根据需要继续外连接其他表,从第一个表中获取所有数据,然后仅匹配后续表中的数据。

答案 1 :(得分:0)

你想要的是:

SELECT Table1.EmpNum, Table1.FirstName, Table2.ID, Table2.SecretKey, Table2.NickName 
FROM Table1, Table2 
WHERE Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'
UNION ALL
SELECT Table1.EmpNum, Table1.FirstName, null, null, null
FROM TABLE1
WHERE NOT EXISTS (
    select 1 from Table2
    where Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'
)
通过将逗号连接替换为显式连接

变得更加清晰

SELECT Table1.EmpNum, Table1.FirstName, Table2.ID, Table2.SecretKey, Table2.NickName 
FROM Table1
JOIN Table2 
    ON Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'
UNION
SELECT Table1.EmpNum, Table1.FirstName, null, null, null
FROM TABLE1
WHERE NOT EXISTS (
    select 1 from Table2
    where Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'
)

但是,这与:

相同
SELECT Table1.EmpNum, Table1.FirstName, Table2.ID, Table2.SecretKey, Table2.NickName 
FROM Table1
LEFT JOIN Table2 
    ON Table1.EmpNum=Table2.ID AND Table1.EmpType = '88'
相关问题