SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.06.2013 00:42:05

antipetya
Участник
Зарегистрирован: 04.06.2013
Сообщений: 3

MySQL выборка с 3-х таблиц с группировкой

Есть запрос с джойном:

Есть таблицы:
stuff: (товары)
id|name

orders: (заказанные товары)
id|stuff_id|count

и stock (пополнение складов):
id|stuff_id|count

есть запрос, выбирающий сколько уже заказано товара, и какого товара. Нужно подключить таблицу stock, чтобы из суммы полей SUM(stock.count) при группировке по count.stuff_id вычитать имеющуюся у меня сумму   SUM(orders.count). Дело в том, что я не знаю как подключить третью таблицу к запросу (stock) и получить разницу сумм полей.

В двух словах для ясности:

я делаю запрос

SELECT
  stuff.id,
  stuff.title,
  orders.stuff_id,
  SUM(orders.count)
FROM stuff
  INNER JOIN orders
    ON orders.stuff_id = stuff.id
GROUP BY orders.stuff_id


и получаю:
(id)        (stuff.title)        (stuff_id)        (SUM(orders.count))
1        товар1            1            12
2        товар2            2            3


а нужно мне получить:
(id)        (stuff.title)        (stuff_id)        (SUM(orders.count))    (SUM(stock.count))
1        товар1            1            12            42
2        товар2            2            3            15


то бишь я хочу получить список свободного остатка товаров, поступивших на склады, но не учавствующего пока ни в одном заказе.

Прикрепляю это сообщение, только в форматированном удобном для вас виде (форум некрасиво портит табуляцию в схеме табличек)


Прикрепленные файлы:
Attachment Icon Untitled-1.jpg, Размер: 234,466 байт, Скачано: 775

Неактивен

 

#2 04.06.2013 01:27:40

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: MySQL выборка с 3-х таблиц с группировкой

Да всё просто, добавляете очередной джоин, их хоть десяток можно прописывать smile Ну и с арифметикой чуток поколдовать придётся:

SELECT
   stuff.id,
   stuff.title,
   orders.stuff_id,
   SUM(orders.count) as `orders`,
   SUM(stock.count)-SUM(order.count) as `stock`,
FROM stuff
   INNER JOIN orders
     ON orders.stuff_id = stuff.id
   INNER JOIN stock
     ON stock.stuff_id = stuff.id
GROUP BY stuff.id


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#3 04.06.2013 01:52:28

antipetya
Участник
Зарегистрирован: 04.06.2013
Сообщений: 3

Re: MySQL выборка с 3-х таблиц с группировкой

Neval написал:

Да всё просто, добавляете очередной джоин, их хоть десяток можно прописывать smile Ну и с арифметикой чуток поколдовать придётся:

SELECT
   stuff.id,
   stuff.title,
   orders.stuff_id,
   SUM(orders.count) as `orders`,
   SUM(stock.count)-SUM(order.count) as `stock`,
FROM stuff
   INNER JOIN orders
     ON orders.stuff_id = stuff.id
   INNER JOIN stock
     ON stock.stuff_id = stuff.id
GROUP BY stuff.id

Данный код вызывает у меня ошибку

dbForge Studio написал:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM stuff
    INNER JOIN orders
      ON orders.stuff_id = stuff.id
    INNER J' at line 7

так что пришлось сделать подзапросы. На ответах гугла подсказали.

select
    stuff.id,
    stuff.title,
    orders_g.count as ordered,
    stock_g.count as in_stock,
    stock_g.count-orders_g.count as left_unordered
from
    stuff left join
    (
        select
            stuff_id,
            sum(count) as count
        from orders
        group by stuff_id
    ) as orders_g on orders_g.stuff_id=stuff.id left join
    (
        select
            stuff_id,
            sum(count) as count
        from stock
        group by stuff_id
    ) as stock_g on stock_g.stuff_id=stuff.id WHERE stock_g.count-orders_g.count<>0



Спасибо за помощь smile

Неактивен

 

#4 04.06.2013 09:52:21

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: MySQL выборка с 3-х таблиц с группировкой

Хозяин барин конечно, у меня там запятая лишняя перед "FROM", написано же, ошибка синтаксическая smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#5 04.06.2013 11:30:22

antipetya
Участник
Зарегистрирован: 04.06.2013
Сообщений: 3

Re: MySQL выборка с 3-х таблиц с группировкой

Neval написал:

Хозяин барин конечно, у меня там запятая лишняя перед "FROM", написано же, ошибка синтаксическая smile

Да, извините, не углядел. Время позднее (на дату сообщений посмотрите) smile И голова уже начинала уходить спать без моего ведома.

Я запустил ваш запрос, и получил результат, который я в принципе и ожидал. Я пытался делать похожий запрос, но результат получается не правильным.
Ваш запрос учитывает группировку только к одной таблице, а для получения нужных сумм в двух разных таблицах в любом случае необходимо сделать две отдельные выборки, и работать затем с таблицами, полученные из подзапросов, и уже имеющие в себе необходимые значения. Но, спасибо за помощь)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson