2013-04-11 5 views
0

Я читал учебник по SQL в http://www.w3schools.com/sql/sql_foreignkey.asp и задавался вопросом, как будет строиться запрос, если бы у нас было несколько таблиц, ссылающихся на один и тот же первичный ключ. Например, в вышеупомянутой ссылке, что, если бы у нас были таблицы Orders2, Orders3 и Orders4, которые имели аналогичную функциональность (таблицы «Заказы»), так что у них есть столбец с именем P_Id.SQL-запрос с использованием внешних ключей

Как создать запрос с указанием количества раз, когда клиент указан в таблицах «Заказы», ​​«Заказы2», «Заказы3» и «Ордеры4» вместе с именем соответствующего клиента?

ответ

3

Регистрация каждой таблицы с помощью 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 
+0

я не могу изменить, потому что не хватает символов, чтобы изменить, но псевдонимы таблиц являются неверно (Orders2-4 - все «b»). – JakeP

+0

@JakeP: спасибо, я на это – PinnyM

+0

вы имели в виду следующее: LEFT JOIN заказывает ON p.P_Id = a.P_Id LEFT JOIN Orders2 B ON p.P_Id = b.P_Id LEFT JOIN Orders3 б р. P_Id = b.P_Id LEFT JOIN Orders4 b ON p.P_Id = b.P_Id Потому что это не имеет никакого смысла для меня –

Смежные вопросы