Задавайте вопросы, мы ответим
Вы не зашли.
Бодрого времени суток!
Есть 3 таблицы
tovar - справочник товаров
tovarprih - поступления
zakazmaterial - отпуск
Необходимо выбрать список товара из справочника с остатками приход-расход. При этом товар может быть отпущен, но не поступил.
Делаю:
select tovar.name, sum(tovarprih.kol), sum(zakazmaterial.kol) from tovar, tovarprih, zakazmaterial where tovarprih.tovarid=tovar.id and zakazmaterial.idname=tovar.id GROUP BY tovar.name
Что не так.
Неактивен
Опишите, в чем конкретно состоит проблема.
Неактивен
Проблема состоит в следующем:
выборка select tovar.name, sum(tovarprih.kol) from tovar, tovarprih group by tovar.name
дает результат корректный, какой товар поступил. Аналогично дает выборка по расходу.
А если выбираем и то и то, появляются казусы.
Товар есть в таблице tovarprih но нет в zakazmaterial - в выборку не попадает
Товар есть в таблице zakazmaterial но нет tovarprih в - в выборку не попадает
Поэтому суммировать приход - расход не получается
Неактивен
Если Вы хотите объединить две выборки, то можно использовать UNION
(SELECT name FROM tovarprih) UNION (SELECT name FROM zakazmaterial)
Неактивен
belenkov написал:
Проблема состоит в следующем:
выборка select tovar.name, sum(tovarprih.kol) from tovar, tovarprih group by tovar.name
дает результат корректный, какой товар поступил. Аналогично дает выборка по расходу.
А если выбираем и то и то, появляются казусы.
Товар есть в таблице tovarprih но нет в zakazmaterial - в выборку не попадает
Товар есть в таблице zakazmaterial но нет tovarprih в - в выборку не попадает
Поэтому суммировать приход - расход не получается
Так и должно быть. Вы перечесляете таблицы через запятую (аналог врутреннего объединения - INNER JOIN), т.е. выбираете только записи имеющие соответствие. А хотите получить записи в том числе и не имеющие соответствия, для этого Вам нужно использовать внешнее объединение, например LEFT JOIN.
Например Ваш запрос может выглядеть следующим образом:
SELECT Tovar.Name SUM(Tovarprih.Kol), SUM(Zakazmaterial.Kol) FROM Tovar LEFT JOIN Tovarprih ON Tovarprih.Tovarid=Tovar.Id LEFT JOIN Zakazmaterial ON Zakazmaterial.Idname=Tovar.Id GROUP BY Tovar.Name
Неактивен