Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Операция пересечения в SQL-запросе.   Найти похожие ветки 

 
Heretic ©   (2004-09-02 10:09) [0]

Помогите разобраться
Есть база, отражающая какие предметы должны изучать группы специальностей в институте.
Например:
-----------------------------------------
Специальность         Предмет
-----------------------------------------
АПП   Правоведение
АПП   Станкостроение
АПП   Материалы
ИТ   Правоведение
ИТ   САПР
МОТ   Правоведение
и т.д...

В запросе необходимо отобрать общие предметы по определенным специальностям. В результате должно получиться: Общие предметы по специальностям «АПП», «ИТ», «МОТ»: «Правоведение».
При попытке написать запрос:
-------Вид1
Select Predmet
From «Basa.db»
Where
(Specialnost=«АПП»)
OR (Specialnost=«ИТ»)
OR (Specialnost=«МОТ»)
и т.д.
-------
выводятся вообще все предметы изучаемые той или иной специальностью. Это логично, но мне нужен другой результат (см. выше).

Запрос получается такой:
-----------Вид2
Select Predmet
From «Basa.db»
Where (Specialnost=«АПП»)
INTERSECT Select Predmet
From «Basa.db»
Where (Specialnost=«ИТ»)
INTERSECT Select Predmet
From «Basa.db»
Where (Specialnost=«МОТ »)
и т.д.
----------
Проблема в том, что я заранее не знаю количества специальностей, а запрос получается громоздкий
Нельзя ли как-нибудь изменить запрос Вид1, просто используя AND, OR, NOT?


 
Rule ©   (2004-09-02 10:34) [1]

Помоему изначально неправильный подход, база не нормализована, помоему необходимо создать три таблицы, таблица списка предметов, таблица списка специальностей и таблица сообветствия специальности и предметов


 
Rule ©   (2004-09-02 10:37) [2]

Второй момент, если ты не знаешь количество специальностей заранее, то тебе прийдется формировать запрос динамически


 
Rule ©   (2004-09-02 10:52) [3]

Давай дальше разбиратся допустим таблица первая специальноестей SPETS имеет вид
ID - уникальный номер специальности
NAME - название специальности

Таблица предметов PREDMETS имеет вид
ID - уникальный номер предмета
NAME - название предмета

таблица соответствий SOOT имеет вид:
ID - уникальный номер записи
ID_SPETS - номер специальности
ID_PREDMET - номер предмета

Таким образом для выыбора таблицы соответсивий с именами надо
select a.id, b.name, c.name from  soot a, spets b, predmet c where a.ID_SPETS=b.id and a.id_predmet=c.id


 
Rule ©   (2004-09-02 11:14) [4]

Таким образом возвращаемся к задаче выбора предметов, которые есть во всех специальностях
select a.name from "Predmets" a where (select count(b.id) from spets b)=(select count(c."ID_spets") from soot c where c."ID_predmets"=a.id)

вот такой запроски получается, имена можешь менять, тоесть мы получили список всех предметов котоыре есть во всех специальностях, а если надо список предметов которые есть в определенных специальностях, то надо сделать так


 
Rule ©   (2004-09-02 11:40) [5]

Ау, тут есть кто, это воообще надо комуто кроме меня ?


 
Heretic ©   (2004-09-02 16:54) [6]

>Rule
Я приношу извинения за отсутствие – отлучался от компьютера.
Я Вас понял, и вся база у меня именно так и выглядит: «Предметы.db», «Специальности.db» и «Изучение.db». Надо получить только одинаковые предметы определенных специальностей


 
oldman ©   (2004-09-02 17:17) [7]

Select * from base.db where predmet = "ченадо";
Если больше 1 записи в запросе - больше одной группы изучает этот предмет.
:)))


 
Heretic ©   (2004-09-02 17:34) [8]

oldman
Я не знаю какой именно предмет «ченадо». Я хочу получить в результате КАКИЕ предметы являются ОБЩИМИ в выбранных мною специальностях.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
10-1042206104
zx2
2003-01-10 16:41
2004.10.03
Создание сервера Corba и клиента Corba


11-1080976041
Deimos
2004-04-03 11:07
2004.10.03
где мои байты ????


14-1095385238
Думкин
2004-09-17 05:40
2004.10.03
С днем рождения! 17 сентября


14-1095306740
КаПиБаРа
2004-09-16 07:52
2004.10.03
Опрос - Когда вы впервые пришли на этот форум?


1-1095409645
TUser
2004-09-17 12:27
2004.10.03
Delphi < --- > CB





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский