Forum Webscript.Ru

Общие => Базы данных => Тема начата: fikka от 19 Февраля 2002, 22:28:23

Название: MySQL: LEFT JOIN
Отправлено: fikka от 19 Февраля 2002, 22:28:23
Проблема: LEFT JOIN не поддерживает ситуацию, когда несколько полей в одной таблице ссылаются на один и тот же справочник (таблицу).
Например:
Таблица ТПара_Учеников (ID, Ученик1_ID, Ученик2_ID)
Таблица ТСправочник_Учеников (ID,Фамилия, Имя, №Школы, Класс)
Поля Ученик1_ID, Ученик2_ID ссылаются на поле ID в таблице ТСправочник_Учеников.

Расскажите, плз, как Вы это обходите.
Спасибо.
Название: MySQL: LEFT JOIN
Отправлено: Chs от 20 Февраля 2002, 09:08:26
А вы расскажите что же все-таки надо сделать.:)
Какой должен быть результат запроса?
Название: MySQL: LEFT JOIN
Отправлено: AlieN от 20 Февраля 2002, 14:39:03
Если я тебе правильно понял то можно сделать вот как:
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
Название: MySQL: LEFT JOIN
Отправлено: fikka от 20 Февраля 2002, 19:01:48
Пусть есть таблица пар учеников и таблица-список учеников:

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), подобное становится невозможным. Где грабли и как их обойти?
Название: MySQL: LEFT JOIN
Отправлено: Chs от 21 Февраля 2002, 09:56:25
Цитировать
НО! С появлением второго поля (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
Название: MySQL: LEFT JOIN
Отправлено: fikka от 21 Февраля 2002, 23:14:17
To Chs:

хм...получается вот, что:

ID   Student1_FirstName  Student1_LastName  Student1_Age  Student2_FirstName  Student2_LastName  Student2_Age  
1    Тоня                Соображалкина      16            Тоня                Соображалкина      16  
2    Петя                Бейсиков           17            Петя                Бейсиков           17  
3    Тоня                Соображалкина      16            Тоня                Соображалкина      16
Название: MySQL: LEFT JOIN
Отправлено: fikka от 22 Февраля 2002, 02:22:21
Всё, вопрос снят :)
Спасибо.