2016-08-17 4 views
0

Ну, у меня есть три таблицы:Выберите вещи из трех различных таблиц с внутренним соединением

Корзина:

ID | Product | Quantity 
1 S1FG  3 
1 C0K0  1 
1 SLM1  6 
2 S1FG  2 
2 S94A  2 

Продукты:

Code | Price 
S1FG 10.00 
C0K0 8.00 
SLM1 19.50 
S94A 2.00 

И пользователей:

ID | Nickname 
1 Mark 
2 Steve 

Я хочу это:

Nickname | Products | Total 
Mark  10   155.00 
Steve  4   24.00 

В словах, я хочу, список пользователей, который имеет что-то в корзину, подсчет их элементов и сумму цен их элементов.

Я попытался это:

SELECT DISTINCT b.Nickname, SUM(a.Quantity) as Products, SUM(a.Quantity*c.Price) as Total 
FROM Cart a 
INNER JOIN Users b ON (a.ID = b.ID) 
INNER JOIN Products c ON (a.Product = c.Code) 

Но это не сработало ...

Что я могу сделать?

ответ

1

Вы должны GROUP BY прозвище или вы просто получить одну строку:

SELECT DISTINCT b.Nickname, SUM(a.Quantity) as Products, SUM(a.Quantity*c.Price) as Total 
FROM Cart a 
INNER JOIN Users b ON (a.ID = b.ID) 
INNER JOIN Products c ON (a.Product = c.Code) 
GROUP BY b.Nickname 
+0

Спасибо, мужчина, работал как шарм c: – Malork

+0

Рад, что я мог помочь! – wogsland

0

Есть два вопроса:

  1. Вы не в нормализованной форме: то есть вы необходимо сделать ваши первичные ключи уникальными (автоинкремент проще всего на идентификаторе), а затем создать столбец для (User ID) или что-то в этом роде внутри таблицы Cart. Это также относится к таблице продуктов: у вас есть столбец «Код», но это поле varchar, которое содержит буквенно-цифровые символы. Этот метод не рекомендуется, так как индексирование полей varchar может занимать значительно больше времени, чем столбец int.

  2. Ваша логика по самому запросу: при создании объединений или внутренних соединений из одной таблицы в другую вы действительно должны использовать первичные и вторичные ключи для присоединения к вашим таблицам.

Эти две проблемы в совокупности делают этот конкретный запрос относительно сложным. Если, однако, вы нормализуете свою таблицу, тогда вы будете продвигаться вперед.

+3

Вы не ответили на вопрос. Также в ваших общих советах есть ошибки. – Marki555

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