[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Соединение данных из двух таблиц
Zlobusz
Здравствуйте глубокоуважаемые знатакие языка структурированных запросов.
Обращается к вам не знаток, но и не полный нуб... В общем у меня дилемма. Не могу произвести агрегирование данных из двух таблиц.
Есть две таблицы:
Бюджет специальности
b123456789(discipid, examn, cursen, controln, offsetn, theoryh, labsh, curseh, totalh, sem1h, sem2h, sem3h, semnh, ..., ...)
И дисциплины
disciplines(id, name)
Как вы уже смогли понять, в поле discipid хранятся айдишники специальностей из таблицы disciplines, т.е. b123456789.discipid берется из disciplines.id.
Мне нужно айдишник и название специальности, для которой в таблице b123456789 sem1h и sem2h не равны нулю.
Почитав соответствующую литературу я понял что нужно получить соединение по равенству (equi-join). Написал соответствующий запрос:

SELECT b123456789.discipid, disciplines.name
FROM b123456789, disciplines
WHERE b123456789.sem1h <>0
OR b123456789.sem2h <>0
AND b123456789.discipid = disciplines.id

Но вот не выдает он мне то что нужно и все тут! Вместо необходимых мне строчек выдается таблица из двух столбцов, как мне надо, и даже в первом выдаются яйдишники дисциплин, для у которых sem1h и sem2h не равны нулю (всего 2 таких) и он повторяет их столько раз, сколько записей в таблице disciplines...вот так:
user posted image
Что тут не так? Помогите разобраться, пожалуйста, у меня уже паника, в понедельник крайний срок сдачи проги по диплому, а у меня не получается самое главное :(



Спустя 44 минуты, 8 секунд (11.06.2011 - 18:09) Zlobusz написал(а):
Эврика! у меня получилось объединить, заменив OR на AND, вот так:

SELECT b123456789.discipid, disciplines.name
FROM b123456789, disciplines
WHERE b123456789.sem1h <>0
AND b123456789.sem2h <>0
AND b123456789.discipid = disciplines.id

Вот только мне нужен именно OR, ведь не всегда предмет читается в двух семестрах сразу, как сделать ИЛИ в этом запросе?

Спустя 14 минут, 34 секунды (11.06.2011 - 18:24) Zlobusz написал(а):
Урааа заработало!!! Как говорится метод тыка - лучший метод! В общем, запрос получился следующим:

SELECT disciplines.id, disciplines.name
FROM b123456789, disciplines
WHERE b123456789.sem1h <>0
AND b123456789.discipid = disciplines.id
OR b123456789.sem2h <>0
AND b123456789.discipid = disciplines.id

Не знаю как он выглядит с точки зрения производительности, но работает так как нужно. Может кто подскажет более рациональный вариант?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.