![]()  | 
		     | 
	
Задавайте вопросы, мы ответим
Вы не зашли.
вопрос возник по одному запросу. вывести имена клиентов купившие товар. если товар был закуплен только у одного клиента с id=2. 
клиенты( id_клиента, имя клиента); 
продажа(id_продажи, id_клиента);
 журнал продаж (id_продажи, количество); 
закупка(id_закупки, id_поставщика); 
журнал закупки( id_закупки, id_товара); 
поставщик(id_поставщика) товары(id_товара); 
select name from клиенты where id_клиента in (select id_клиента from продажа where id_продажи in (select id_продажи from продажа)); как написать вторую часть условий?
Неактивен

Насколько я понимаю, с данной структурой это невозможно. Как определить у кого купил товар клиент под номером id=x?
Неактивен

Я так понимаю, что тут организована не система абстрактных отношений, а всё
завязано на конкретную фирму, перераспределяющую блага 
 В частности,
поставщики и клиенты — это у одной фирмы ![]()
Тогда товары поставщика 2:
SELECT id_товара
FROM закупка JOIN журналзакупки USING (id_закупки)
WHERE id_поставщика = 2
Далее нам нужно убедиться, что этого товара нет ни у одного другого поставщика:
SELECT id_товара
FROM закупка 
  JOIN журналзакупки USING (id_закупки)
  JOIN ( .. первый подзапрос .. ) x USING (id_товара)
GROUP BY 1
HAVING COUNT(*) = 1
Ну и, наконец, найти клиентов, которые купили только товары из списка:
SELECT имя
FROM клиенты
  JOIN продажа USING (id_клиента)
  JOIN журналпродаж USING (id_продажи)
  JOIN ( .. второй подзапрос .. ) y USING (id_товара)
Ну и поля id_товара в журнале продаж, разумеется, не хватает, да.
Неактивен