powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Работа запроса sql
2 сообщений из 2, страница 1 из 1
Работа запроса sql
    #38668183
_Lenta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять как работает запрос, объясните, пожалуйста, по шагам... желательно, подробно
Таблица SPJ(номер_поставщика, номер_детали, номер_изделия, количество)
Запрос: (выдать номера поставщиков, которые поставляют по крайней мере те детали, которые поставляет поставщик S2)
Запрос работает ПРАВИЛЬНО!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT DISTINCT nomer_postavshika
FROM spj o1
WHERE NOT EXISTS (
                  SELECT nomer_detali
                  FROM spj o2
                  WHERE nomer_postavshika = 'S2'
                   AND NOT EXISTS (
                                    SELECT *
                                    FROM spj
                                    WHERE nomer_postavshika = o1.nomer_postavshika
                                      AND nomer_detali = o2.nomer_detali
                                   ) 
                 );
...
Рейтинг: 0 / 0
Работа запроса sql
    #38668256
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как именно работает тот или иной запрос надо смотреть с помощью специальных диагностических средств которые существуют для той РСУБД, на которой выполняется запрос. Только по синтаксису однозначно определить шаги сложно, а иногда и попросту невозможно, слишком много возможных вариантов. Другое дело, это понять, как работает запрос на языке множеств. В этом случае иногда может помочь тупая замена английских ключевых слов на русские эквиваленты в духе 1С. В данном случае, это несложно, хотя сам запрос написан очень коряво, от обратного.
1. Выбрать номера деталей для поставщика S2
2. Для каждой детали, номер которой получен в шаге 1, найти поставщиков, которые не поставляют те же детали
3. Исключить из полного списка поставок тех поставщиков, которые были найдены на 2 шаге
4. Убрать повторы номеров поставщиков, полученных на 3 шаге

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT DISTINCT nomer_postavshika <-шаг 4
FROM spj o1
WHERE NOT EXISTS ( <-шаг 3
                  SELECT nomer_detali  <-шаг 1
                  FROM spj o2
                  WHERE nomer_postavshika = 'S2'
                   AND NOT EXISTS ( <-шаг 2
                                    SELECT *
                                    FROM spj
                                    WHERE nomer_postavshika = o1.nomer_postavshika
                                      AND nomer_detali = o2.nomer_detali
                                   ) 
                 );



P.S. Можно было написать запрос проще и попонятнее.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Работа запроса sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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