Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Вопрос по SQL


Автор: Матроскин 10.7.2004, 06:21
Уважаемые коллеги! В результате выполнения нижеприведённого запроса
у меня выходит две одинаковые строчки. На складе же у меня
хранится только один элемент "жесткий диск...". В чём может быть проблема?

Запрос:
SELECT element.name_full, producer.name, element.step_date,
sourcer.name,warehouse.name
FROM element, producer,sourcer,warehouse,
delivery,be,composition,produce
WHERE (element.elm_id=delivery.sourcer_id)
AND
(delivery.sourcer_id=sourcer.sourcer_id)

AND
(element.elm_id=be.elm_id)
AND
(be.wh_id=warehouse.wh_id)

AND
(element.elm_id=composition.elm_id)
AND
(composition.complete_id=0)

AND
(element.elm_id=produce.elm_id)
AND
(producer.prod_id=produce.prod_id)


Результат запроса
Жёсткий диск 20 гб, 7200 об. Samsung 1999-03-01 00:00:00.000 ДНС Товар.склад.группа
Жёсткий диск 20 гб, 7200 об. Samsung 1999-03-01 00:00:00.000 ДНС Товар.склад.группа
Lazerjet 400C Epson 2003-02-15 00:00:00.000 Бит Технический склад

Автор: Secandr 10.7.2004, 07:39
а если добавить GROUP BY (идинтификатор записи в которой храниться название товара)

Автор: <Spawn> 10.7.2004, 09:17
Матроскин Во первых, зачем ты включаешь в запрос таблицы, которые тут не нужны просто? Ты же выбираешь данные из element, producer, element,
sourcer,warehouse. Или у тебя другие таблицы являются связывающими?
Во вторых дубляж можешь обойти либо DISTINCT-ом, либо GROUP BY - ем, либо EXIST-ом(все зависит от конкретного случая), но DISTINCT это не есть хорошо, так как с ним все записи тянутся к клиенту и потом только происходит обрезание дубляжей. Если бы показал значение строк таблицы для этого диска, то может и причина стала бы ясна

Автор: Матроскин 12.7.2004, 15:11
Цитата
Матроскин Во первых, зачем ты включаешь в запрос таблицы, которые тут не нужны просто? Ты же выбираешь данные из element, producer, element,
sourcer,warehouse. Или у тебя другие таблицы являются связывающими?
Во вторых дубляж можешь обойти либо DISTINCT-ом, либо GROUP BY - ем, либо EXIST-ом(все зависит от конкретного случая), но DISTINCT это не есть хорошо, так как с ним все записи тянутся к клиенту и потом только происходит обрезание дубляжей. Если бы показал значение строк таблицы для этого диска, то может и причина стала бы ясна

Group by ПОМОГ. Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)