Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2011, 08:49   #1
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию Выдать номера деталей, поставляемых для всех изделий из Лондона

Добрый день.
Не могу сообразить как сделать SQL-запрос из следующей фразы:
Выдать номера деталей, поставляемых для всех изделий из Лондона.
Т.е. нужно выбрать такие детали,которые есть у всех лондонских изделий.

Заранее спасибо. Буду рад любой помощи
Petruha-nsk вне форума Ответить с цитированием
Старый 26.09.2011, 08:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Берем неизвестную таблицу (таблицы) с неизвестной структурой, пишем запрос "Выдать номера деталей, поставляемых для всех изделий из Лондона." и Ok Структуру данных привести не судбьа?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.09.2011, 09:06   #3
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

да вроде структура не так уж и важна (есть две таблицы со своими столбцами),назвать их можно было как угодно ну да ладно

таблица SPJ. Таблица поставок, в ней поля
номер_поставщика, номер_детали, номер_изделия, Количество

таблица J. Таблица изделий, в ней поля
Номер-изделия, Название, Город
Petruha-nsk вне форума Ответить с цитированием
Старый 26.09.2011, 09:28   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Код:
select номер_детали from SPJ inner join J on SPJ.номер_изделия=J.Номер-изделия where J.Город='Лондон'
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.09.2011, 09:29   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
да вроде структура не так уж и важна (есть две таблицы со своими столбцами),
вот так заявление!!!
Это для запроса структура таблиц неважна?!!!
Вы или шутите или ОЧЕНЬ сильно заблуждаетесь!
___

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

А, если я правильно понял фразу "нужно выбрать такие детали,которые есть у всех лондонских изделий.",
то нужно выбрать такие детали, которые есть ВО ВСЕХ без исключения лондоских изделиях.
А те детали, которые не во всех изделиях присутствуют - выбирать не надо.

p.s. сам запрос я набросать не готов..

Последний раз редактировалось Serge_Bliznykov; 26.09.2011 в 09:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.09.2011, 09:37   #6
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

да,Вы правы про ВСЕ изделия. а по поводу структуры таблиц я и правда погорячился
Petruha-nsk вне форума Ответить с цитированием
Старый 26.09.2011, 09:46   #7
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

Всем спасибо за участие и за помощь мне. Запрос составил. Если кому интересно, вот:

Код:
select distinct x.номер_детали
from spj x
where 
(
 select count(distinct номер_изделия)
 from spj
 where номер_изделия in(select номер_изделия from j where город='Лондон') and номер_детали=x.номер_детали
)=(select count(номер_изделия) from j where город='Лондон')
Petruha-nsk вне форума Ответить с цитированием
Старый 26.09.2011, 09:58   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Попробуйте так: (Правда зависит от СУБД)
Код:
select номер_детали from  SPJ inner join J on SPJ.номер_изделия=J.Номер-изделия where SPJ.номер_изделия=all (select номер_изделия from J where J.Город='Лондон')
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 26.09.2011, 10:02   #9
Petruha-nsk
Пользователь
 
Аватар для Petruha-nsk
 
Регистрация: 10.04.2009
Сообщений: 69
По умолчанию

на PostgreSQL выдал,что данных не найдено
Petruha-nsk вне форума Ответить с цитированием
Старый 26.09.2011, 10:46   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а создайте несколько одинаковых номеров деталей для одно и того же изделия из Лондона (от разных поставщиков или с разным количеством).
Ваш запрос нормально отработает?

а у меня получился такой запрос:
Код:
SELECT LondonGrp.NOM_D
FROM [SELECT SPJ.Nom_d, SPJ.Nom_izd
FROM SPJ INNER JOIN J ON SPJ.Nom_izd=J.Nom_izd
WHERE J.City='London'
GROUP BY SPJ.Nom_d, SPJ.Nom_izd]. AS LondonGrp
GROUP BY LondonGrp.NOM_D
HAVING count(*) = 
(select count(*) from (select  SPJ.NOM_IZD FROM SPJ INNER JOIN J ON SPJ.Nom_izd=J.Nom_izd
  WHERE J.City='London'
  GROUP BY SPJ.Nom_izd));

БД тестовую (MS Access) прилагаю...
Вложения
Тип файла: rar db_test_London(access).rar (10.3 Кб, 21 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получения серийного номера HDD во всех ОС $T@LKER C# (си шарп) 4 29.03.2011 17:57
Cоставить программу для вычисления значения функции и результаты выдать на печать. Бейсик muse26 Помощь студентам 0 19.11.2010 11:37
Составить программу для вычисления значения функции и результаты выдать на печать Pleasant_girl Помощь студентам 8 22.12.2009 22:57
Вывести на экран номера всех элементов, которые не делятся на 7 wrangler Общие вопросы C/C++ 5 10.12.2009 15:37
составить программу для вычисления значения функции и результаты выдать на печать. Бейсик nata89 Помощь студентам 1 06.12.2008 19:53