Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на получение складов с товаром 1го типа, Выбрать склад где только указанный товар 
V
    Опции темы
linuxoid
Дата 17.5.2011, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Здравствуйте, коллеги.

Я работаю на Postgres. Задача такая:

Есть таблица складов, в которой (к примеру) такие записи:

id=1; name=sklad1
id=2. name=sklad2

На каждом складе есть продукты. Это отражено в таблице складские-продукты. К примеру такие записи (типа продуктов всего 2):

id=1; sklad_id=1; type=A; name=produkt1
id=2; sklad_id=1; type=B; name=produkt2
id=3; sklad_id=2; type=A; name=produkt3
...

Как мне выбрать все склады на которых есть только продукты типа А (A и B не подходят). Или как выбрать склады, на которых есть обязательно и А и B. Или склады, на которых только B продукт. Т.е. главное условие при этом, что я должен одним запросом получить id всех таких складов.
Благодарю.

P.S. На данный момент я это делаю так:

SELECT count(*) FROM (SELECT id FROM(SELECT sklad.id, products.type FROM sklad JOIN products ON (sklad.id = products.sklad_id) GROUP BY sklad.id, products.type) AS innerquery GROUP BY id HAVING count(id) > 1) AS innerquery;

* В данном запросе я узнаю, на каких складах более 1 типа продуктов. Тогда можно сделать вывод, что на этом складе будут A и B.

Но думаю, что есть авриант получше, поэтому српашиваю.

Это сообщение отредактировал(а) linuxoid - 17.5.2011, 17:21
PM MAIL   Вверх
Zloxa
Дата 17.5.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(linuxoid @  17.5.2011,  17:03 Найти цитируемый пост)
склад на котором есть только продукты типа А 

Код

select sklad_id
from...
group by sklad_id
having count(distinct type) = 1 and max(type) = 'A'


Цитата(linuxoid @  17.5.2011,  17:03 Найти цитируемый пост)
выбрать склад, на котором есть обязательно и А и B.

Код

select sklad_id
from...
group by sklad_id
having  count(distinct case when type in ('A','B') then type end) = 2 




Это сообщение отредактировал(а) Zloxa - 17.5.2011, 17:23


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
linuxoid
Дата 17.5.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 17.4.2005

Репутация: нет
Всего: нет



Благодарю вас, месье!! Работает, как часы. Я угробил пол дня на самостоятельный поиск... так что большое спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.