запрос на выборку с подчетов строк по FK

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

запрос на выборку с подчетов строк по FK

Сообщение Wontar » 10 фев 2006, 17:26

Вообщем есть таблица "заказов", "пакетов", и "размеров".
заказы 1 - * пакеты
заказы 1 - * размеры.
У заказов PK = Code. У пакетов и размеров FK (ordercode = orders.Code)

Нужно как-то вытащить данные по заказу + кол-во пакетов в нем и суммы кол-ва единиц размеров.
Вообщем я попробовал собрать но он пишет что неправильный Group By.

Код: Выделить всё

SELECT
    ORDERS.CODE,
    ORDERS.DESCRIPTION,
    ORDERS.MODEL,
    ORDERS.SEASON,
    ORDERS.PRODSTART,
    ORDERS.PRODEND,
    ORDERS.CDATETIME,
    COUNT(BUNDLES.ID),
    SUM(SIZEENTRIES.quantity)
FROM
    ORDERS,BUNDLES,SIZEENTRIES
Where
  (ORDERS.CODE = :code)
  AND (BUNDLES.ORDERCODE = ORDERS.CODE)
  AND (SIZEENTRIES.ORDERCODE = ORDERS.CODE)
GROUP BY
  ORDERS.CODE
Подскажите как подправить.

Сенкс.

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 11 фев 2006, 10:55

Поля
ORDERS.DESCRIPTION,
ORDERS.MODEL,
ORDERS.SEASON,
ORDERS.PRODSTART,
ORDERS.PRODEND,
ORDERS.CDATETIME
либо должны быть указаны в GROUP BY,
либо к каждому из них нужно применить одну из функций - sum, max, min, avg

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 11 фев 2006, 17:03

Все бы ничего, но вот только такой запрос ничего не восзвращает, когда должен был бы.

Код: Выделить всё

SELECT
    ORDERS.CODE,
    ORDERS.DESCRIPTION,
    ORDERS.MODEL,
    ORDERS.SEASON,
    ORDERS.PRODSTART,
    ORDERS.PRODEND,
    ORDERS.CDATETIME,
    COUNT(BUNDLES.ID),
    SUM(SIZEENTRIES.quantity)
FROM
    ORDERS,BUNDLES,SIZEENTRIES
Where
  (ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = :CODE)  AND (SIZEENTRIES.ORDERCODE = :CODE)
GROUP BY
  ORDERS.CODE,
  ORDERS.DESCRIPTION,
  ORDERS.MODEL,
  ORDERS.SEASON,
  ORDERS.PRODSTART,
  ORDERS.PRODEND,
  ORDERS.CDATETIME
Не подскажете в чем проблемка ?

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 12 фев 2006, 20:48

Where
(ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = :CODE) AND (SIZEENTRIES.ORDERCODE = :CODE)
Параметр :CODE - это одно и тоже чило для всех равенств?

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 12 фев 2006, 22:06

Да, это одно и тоже. По идее должен указывать на код заказа.
Я также пробовал конструкцию

Код: Выделить всё

Where 
(ORDERS.CODE = :CODE) AND (BUNDLES.ORDERCODE = ORDERS.CODE) AND (SIZEENTRIES.ORDERCODE = ORDERS.CODE)
но она тоже ничего не дает.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2006, 01:19

начни без group by и агрегата. с where, с константой вместо параметра. Возвращает? посмотри на данные, попробуй сгруппировать. и т.д. Это твои данные, поэтому тебе лучше знать, "возвращает или нет".

Wontar
Сообщения: 21
Зарегистрирован: 08 фев 2006, 16:53

Сообщение Wontar » 13 фев 2006, 09:18

Без агрегатов и group by работает хорошо.
Поэтому и странно.

Ответить