这是我试图完成的连接类型的示例。 http://sqlfiddle.com/#!2/aab00/3 。
您可以看到有满足 WHERE
子句但未显示的记录 (Name2, Name3)
。此外,显示的 Name1
记录也不准确。
最佳答案
您应该在join
之前进行聚合:
SELECT t3.PersonName AS Name,
COALESCE(t1.NumberOfCars, 0) AS NumberOfCars,
COALESCE(TMobile, 0) AS TMobileConnections,
COALESCE(ATT, 0) AS ATTConnections
FROM Table3 t3 LEFT OUTER JOIN
Table1 t1
ON t3.PersonSSN = t1.PersonSSN and t1.State = 'FL' LEFT OUTER JOIN
(select t2.PersonSSN, t2.state,
max(t2.Carrier = 'T Mobile') as TMobile,
max(t2.Carrier = 'AT&T') as ATT
from Table2 t2
group by t2.PersonSSN, t2.state
) t2
ON t3.PersonSSN = t2.PersonSSN and t2.State = 'FL';
您还可以在子查询中按状态进行过滤,但这适用于该查询。
请注意,我将所有双引号更改为单引号。始终对字符串和日期常量使用单引号——这是标准 SQL。需要时,使用双引号或反引号来引用标识符。
关于mysql - MYSQL 中连接多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878661/