SQL запрос Выдать номера деталей, поставляемых более чем одним поставщиком

Здравсвуйте.Такая проблема Выдать номера деталей, поставляемых более чем одним поставщиком. У меня есть такой запрос. Но мне сказали сделать нужно через подзапрос. Таблицы: SP - поставки, S - поставщики, P - детали

select 
  n_det 
from SP
group by n_det 
having count(n_post) > 1

SP введите сюда описание изображения

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Alex R.

В вашу поддержку скажу, что на вопрос вы ответили и составили запрос правильно. Корректнее было бы просить вывести имя детали.

Для решения задачи можно воспользоваться оператором EXISTS, который принимает значение TRUE, если подзапрос содержит любое количество строк, иначе его значение равно FALSE. Для NOT EXISTS все наоборот.

SELECT
  *
FROM p
WHERE EXISTS
  (SELECT
     n_det 
   FROM SP
   WHERE sp.n_det = p.n_det 
   GROUP BY sp.n_det
   HAVING count(sp.n_post) > 1)

В подзапросе можно опустить GROUP BY, т.к. все строки по условию будут иметь одинаковый номер детали для каждой детали главного запроса.

Другой вариант

SELECT
  *
FROM p
WHERE 
  (SELECT
     count(sp.n_post) 
   FROM SP
   WHERE sp.n_det = p.n_det) > 1

Третий вариант с полностью вашим запросом

SELECT
  *
FROM p
where p.n_det in 
(select 
   n_det 
 from SP
 group by n_det 
 having count(n_post) > 1)
→ Ссылка