如果存在,我需要从两个表中输出数据。
我想选择表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仍会显示。
如何更改联接以实现此目的。
答案 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'