我正在阅读http://www.w3schools.com/sql/sql_foreignkey.asp上的 SQL 教程,并且想知道如果我们有多个表引用相同的主键,将如何构造查询。例如,在上述链接中,如果我们有一个 Orders2、Orders3 和 Orders4 表,它们都具有相似的功能(表“Orders”),它们有一个名为 P_Id 的列。
如何创建一个查询,列出客户在“Orders”、“Orders2”、“Orders3”和“Orders4”表中列出的次数以及相应的客户姓名?
我正在阅读http://www.w3schools.com/sql/sql_foreignkey.asp上的 SQL 教程,并且想知道如果我们有多个表引用相同的主键,将如何构造查询。例如,在上述链接中,如果我们有一个 Orders2、Orders3 和 Orders4 表,它们都具有相似的功能(表“Orders”),它们有一个名为 P_Id 的列。
如何创建一个查询,列出客户在“Orders”、“Orders2”、“Orders3”和“Orders4”表中列出的次数以及相应的客户姓名?
使用 LEFT JOIN 连接每个表,以防在其中一些表中不存在该人的订单:
SELECT p.P_Id, p.LastName, p.FirstName,
COUNT(a.P_Id) AS OrdersCount,
COUNT(b.P_Id) AS Orders2Count,
COUNT(c.P_Id) AS Orders3Count,
COUNT(d.P_Id) AS Orders4Count
FROM Persons p
LEFT JOIN Orders a ON p.P_Id = a.P_Id
LEFT JOIN Orders2 b ON p.P_Id = b.P_Id
LEFT JOIN Orders3 c ON p.P_Id = c.P_Id
LEFT JOIN Orders4 d ON p.P_Id = d.P_Id
GROUP BY p.P_Id, p.LastName, p.FirstName