powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите подправить запрос
7 сообщений из 7, страница 1 из 1
Помогите подправить запрос
    #38481888
jekas99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть три таблицы
s SN SName (Поставщики)
1 Name1
2 Name2
3 Name3
4 Name4
5 Name5

p PN PName (Детали)
1 Bolt
2 Gaika
3 Shurup
4 Gvozd
5 Samorez

sp SN PN (Взаимосвязь)
1 2
1 4
2 2
3 5
4 2
5 2

Задание: Выбрать поставщиков, которые поставляют все те детали, которые поставляют первый и второй поставщики вместе.

Я набросал запросик, преподаватель сказал что ход верный и сказал попробовать в MySQL но выдает ошибки. Помогите исправить ошибки

SELECT SN FROM S WHERE NOT EXISTS (SELECT * FROM P WHERE NOT EXISTS((SELECT SN,PN WHERE(SP.PN=S.PN) AND (SP.PN=P.PN) AND (S='1'))UNION (SELECT SN,PN FROM S,P,SP WHERE (SP.PN=S.PN)AND (SP.PN=P.PN) AND (S='2')))
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482061
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482178
jekas99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
посмотрел, но кроме того что убрать скобки ничего нового не узнал. укажите в чем моя ошибка
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482439
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот на MS SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if OBJECT_ID('tempdb..#details')<>0 drop table #details
select distinct sp.PN
   into #details
   from sp
   where sp.SN in (1,2)

select sp.SN
from sp
left join #details d on d.PN=sp.PN
group by sp.SN
having COUNT(distinct sp.PN)=(select COUNT(*) from #details i)

drop table #details

А ваш вариант что-то не так делает, даже если ошибки подправить...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT SN
FROM S
WHERE NOT EXISTS 
  (
    SELECT *
    FROM Детали P
    WHERE NOT EXISTS 
    (
      (SELECT sp.SN, sp.PN FROM S, P, SP WHERE (SP.SN = S.SN) AND (SP.PN = P.PN) AND (S.SN = '1'))
      UNION
      (SELECT sp.SN, sp.PN FROM S, P, SP WHERE (SP.SN = S.SN) AND (SP.PN = P.PN) AND (S.SN = '2'))
    )
  )
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482482
transpose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте писать SQL с конца требований.
Сначала напишите кусок который дает вам детали, которые поставляют оба поставщика.
Потом по этим деталям выберите ваших поставщиков.
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482785
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
SELECT SN FROM S 
WHERE NOT EXISTS 
   (SELECT * FROM P WHERE 
   NOT EXISTS((SELECT SN,PN WHERE(SP.PN=S.PN) AND (SP.PN=P.PN) AND (S='1'))
   UNION (SELECT SN,PN FROM S,P,SP WHERE (SP.PN=S.PN)AND (SP.PN=P.PN) AND (S='2'))) 


че то сильно много вложенных запросов,
мое решение:
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT s.* FROM s
JOIN sp AS sp1 ON s.SN=sp1.SN
JOIN sp AS sp2 ON sp1.PN=sp2.PN
JOIN sp AS sp3 ON sp1.PN=sp2.PN
WHERE sp2.SN=1 AND sp3.SN=2
...
Рейтинг: 0 / 0
Помогите подправить запрос
    #38482786
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибку подправил
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT s.* FROM s
JOIN sp AS sp1 ON s.SN=sp1.SN
JOIN sp AS sp2 ON sp1.PN=sp2.PN
JOIN sp AS sp3 ON sp1.PN=sp3.PN
WHERE sp2.SN=1 AND sp3.SN=2
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите подправить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]