SQL запрос Выдать номера деталей, поставляемых более чем одним поставщиком
Здравсвуйте.Такая проблема Выдать номера деталей, поставляемых более чем одним поставщиком. У меня есть такой запрос. Но мне сказали сделать нужно через подзапрос. Таблицы: SP - поставки, S - поставщики, P - детали
select
n_det
from SP
group by n_det
having count(n_post) > 1
Ответы (1 шт):
В вашу поддержку скажу, что на вопрос вы ответили и составили запрос правильно. Корректнее было бы просить вывести имя детали.
Для решения задачи можно воспользоваться оператором 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)


