Автор Тема: MySQL: LEFT JOIN  (Прочитано 3975 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн fikka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: LEFT JOIN
« : 19 Февраля 2002, 22:28:23 »
Проблема: LEFT JOIN не поддерживает ситуацию, когда несколько полей в одной таблице ссылаются на один и тот же справочник (таблицу).
Например:
Таблица ТПара_Учеников (ID, Ученик1_ID, Ученик2_ID)
Таблица ТСправочник_Учеников (ID,Фамилия, Имя, №Школы, Класс)
Поля Ученик1_ID, Ученик2_ID ссылаются на поле ID в таблице ТСправочник_Учеников.

Расскажите, плз, как Вы это обходите.
Спасибо.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
MySQL: LEFT JOIN
« Ответ #1 : 20 Февраля 2002, 09:08:26 »
А вы расскажите что же все-таки надо сделать.:)
Какой должен быть результат запроса?
2B OR NOT 2B = FF

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
MySQL: LEFT JOIN
« Ответ #2 : 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
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн fikka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: LEFT JOIN
« Ответ #3 : 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
.IDTStudent.FirstNameTStudent.LastNameTStudent.Age  
FROM TStudentPairs LEFT JOIN TStudent ON TStudentPairs
.ID TStudent.ID;

НО! С появлением второго поля (TStudentPairs.Student2_ID), ссылающегося на тот же справочник (TStudent), подобное становится невозможным. Где грабли и как их обойти?
« Последнее редактирование: 20 Февраля 2002, 19:09:43 от fikka »

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
MySQL: LEFT JOIN
« Ответ #4 : 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
2B OR NOT 2B = FF

Оффлайн fikka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: LEFT JOIN
« Ответ #5 : 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

Оффлайн fikka

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 12
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: LEFT JOIN
« Ответ #6 : 22 Февраля 2002, 02:22:21 »
Всё, вопрос снят :)
Спасибо.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28