2016-10-20 3 views
0

У меня есть 3 таблицы, как следующее:Mysql присоединиться к 3 таблицы запроса

branch 
id name 
--------- 
1 abc 
2 xyz 

users 
id branch_id name 
----------------- 
1 1   aa 
2 1   bb 
3 2   cc 
4 1   dd 
5 2   ee 

sales 

id user_id product price 
1 1  xxxx  10 
2 1  yyyy  20 
3 2  zzzz  18 
4 3  aaaa  12 
5 2  bbbb  10 
6 4  cccc  20 

Теперь я хочу, чтобы получить общее количество продаж отрасли мудры, как:

branch_id total_price 
--------------------- 
1   78  
2   12 

Для этого я написать SQL запрос типа :

SELECT SUM(s.price) , b.id 
FROM sales s 
JOIN branch b 
GROUP BY id 
HAVING s.user_id 
IN (
SELECT id 
FROM users 
WHERE branch_id = b.id 
) 

Но это не дает ответ, который я хочу. Пожалуйста, помогите мне.

ответ

1

Я думаю, что это следует сделать трюк:

SELECT branch.id AS branch_id, SUM(s.price) AS total_price 
FROM branch 
JOIN users ON branch.id = users.branch_id 
JOIN sales ON users.id = sales.user_id 
GROUP BY branch.id; 

Также вы можете использовать INNER JOIN вместо JOIN (оба делают то же самое). С INNER JOIN это возможно, легче читать, особенно запрос содержит другие типы JOIN-х, как LEFT JOIN или RIGHT JOIN

Надежда, что помогает!

+0

Сообщайте OP, что INNER JOIN совпадает с JOIN. Ключевое слово INNER является необязательным. Как сейчас, OP может подумать, что это два разных способа присоединиться. – jarlh

+0

@jarlh Спасибо за ваш совет. То, что я хотел сказать с помощью «Также вы могли бы использовать INNER JOIN вместо соединения».! Но похоже, что он не сформулировал это хорошо. –

1

Вы могли бы использовать что-то вроде этого:

SELECT u.branch_id, SUM(s.price) AS total_price 
FROM sales AS s INNER JOIN users u ON s.user_id = user.id 
GROUP BY u.branch_id 
ORDER BY u.branch_id 
Смежные вопросы