Forum Webscript.Ru
Общие => Базы данных => Тема начата: fikka от 19 Февраля 2002, 22:28:23
-
Проблема: LEFT JOIN не поддерживает ситуацию, когда несколько полей в одной таблице ссылаются на один и тот же справочник (таблицу).
Например:
Таблица ТПара_Учеников (ID, Ученик1_ID, Ученик2_ID)
Таблица ТСправочник_Учеников (ID,Фамилия, Имя, №Школы, Класс)
Поля Ученик1_ID, Ученик2_ID ссылаются на поле ID в таблице ТСправочник_Учеников.
Расскажите, плз, как Вы это обходите.
Спасибо.
-
А вы расскажите что же все-таки надо сделать.:)
Какой должен быть результат запроса?
-
Если я тебе правильно понял то можно сделать вот как:
select table1.group_id,table2.first_name,table2.last_name,tabl2.school,table2.grade from table1,table2 where table1.uch1_id=table2.id or(xor) table1.uch2_id=table2.id
Точно не знаю поддержэивает ли mySQL xor но если поддерживает то лучше
PS Жаль MySQL не поддеривает вложенных селектов :o
-
Пусть есть таблица пар учеников и таблица-список учеников:
TStudentPairs:
ID Student1_ID Student2_ID
1 1 3
2 2 1
3 2 3
TStudent:
ID FirstName LastName Age
1 Петя Бейсиков 18
2 Вася Пупкин 17
3 Тоня Соображалкина 6
Структура данных соответствует 3-ей нормальной форме. Теперь нужно временно склеить все воедино, в первородную "неправильную" таблицу такого вида (например для отображения):
ID Student1_FirstName Student1_LastName Student1_Age Student2_FirstName Student2_LastName Student2_Age
1 Петя Бейсиков 18 Тоня Соображалкина 16
2 Вася Пупкин 17 Петя Бейсиков 18
3 Вася Пупкин 17 Тоня Соображалкина 16
Если бы не было поля TStudentPairs.Student2_ID, то SQL-выражение выглядело бы так:
SELECT TStudentPairs.ID, TStudent.FirstName, TStudent.LastName, TStudent.Age
FROM TStudentPairs LEFT JOIN TStudent ON TStudentPairs.ID = TStudent.ID;
НО! С появлением второго поля (TStudentPairs.Student2_ID), ссылающегося на тот же справочник (TStudent), подобное становится невозможным. Где грабли и как их обойти?
-
НО! С появлением второго поля (TStudentPairs.Student2_ID), ссылающегося на тот же справочник (TStudent), подобное становится невозможным. Где грабли и как их обойти?
Двойной LEFT JOIN :)
SELECT a.ID, b.FirstName, b.LastName, b.Age, c.FirstName, c.LastName, c.Age FROM TStudentPairs as a LEFT JOIN TStudent as b ON a.Student1_ID = b.ID LEFT JOIN TStudent as c ON a.Student2_ID = c.ID
-
To Chs:
хм...получается вот, что:
ID Student1_FirstName Student1_LastName Student1_Age Student2_FirstName Student2_LastName Student2_Age
1 Тоня Соображалкина 16 Тоня Соображалкина 16
2 Петя Бейсиков 17 Петя Бейсиков 17
3 Тоня Соображалкина 16 Тоня Соображалкина 16
-
Всё, вопрос снят :)
Спасибо.