2 записи из одной таблицы в одной строке запроса: как это делается?

Sancho

Новичок
2 записи из одной таблицы в одной строке запроса: как это делается?

Проблема в следующем: у меня есть некоторая таблица, 2 поля которой содержат ссылки на 2 различных записи другой таблицы. Необходимо выбрать в отдельном запросе оба этих поля. То есть, допустим, в первой таблице есть поля rec1 и rec2, а во второй под айдишником rec1 запись zapis1, а под айдишником rec2 запись zapis2. Как сформировать запрос, который выведет одновременно zapis1 и zapis2?
P.S.
Надеюсь, я достаточно понятно объяснил суть проблемы:D
 

Sancho

Новичок
fixxxer, а она неправильно спроектирована для данного конкретного случая? Или она не отвечает какой-то из НФ? Просто я, честно говоря, пока не могу себе представить, как более правильно её спроектировать...
 

TuBu

Guest
А в чем проблема-то?

2 (Два) джойна тебе хватит
 

fixxxer

К.О.
Партнер клуба
"допустим, в первой таблице есть поля rec1 и rec2"

предлагаю самостоятельно выяснить, какой из нормальных форм не соответствует такая структура.
это типичная ошибка.

2All: про джойны и принципиальную допустимость (иногда) такой структуры с целью повышения производительности всех попрошу помолчать :)
 

Yurik

/dev/null
fixxxer: не вижу проблем с проектом БД, очень даже НФ. Частое явление когда свойства объекта берутся из дополнительных таблиц, например

автомобили
========
ид
ид_страна (таблица с кодами стран)
ид_цвет (таблица с кодами цветов)
ид_производитель (таблица с кодами производителей)
ид_тип_кузова (таблица с типами кузовов)
ид_тип_двигателя (таблица типов двигателя)
....

Sancho сделай простой INNER JOIN 3 таблиц

SELECT zapis1, zapis2 from t, t1, t2 WHERE
t.rec1=t1.idrec1 AND t.rec2=t2.idrec2
 

Sancho

Новичок
Yurik, спасибо за совет, всё сработало:)

Всем спасибо за ответы и советы:D
 

Sancho

Новичок
Ну вот, допустим, моя ситуация, просто не хотел называть что-то конкретное, чтобы излишне не "нагружать":))
У меня есть для футбольного сайта таблица трансферов и есть таблица команд. В таблице трансферов у меня одно поле - ссылка на команду, откуда ушёл игрок, а другое - на команду, куда ушёл игрок, обе, разумеется, на одну и ту же таблицу "команды". Как ваше мнение, есть ли более грамотное решение реализации такой системы? Если есть, с удовольствием к нему прислушаюсь
:)
 

alexhemp

Новичок
а что тут неграмотного

хочешь запрос сделать - используй алиасы таблиц

что-то вроде SELECT t1.ИМЯ_КОМАНДЫ AS ОТКУДА,
t2.ИМЯ_КОМАНДЫ AS КУДА FROM команды t1, команды t2, трансферы t WHERE t.ИГРОК_ОТКУДА=t1.ID AND t.ИГРОК_КУДА=t2.ID ...
 

Sluggard

Новичок
запрос:
------------------------------------------------------------------------------------
SELECT t1.team_name AS team_left, t2.team_name AS team_current FROM transf AS t, teams AS t1, teams AS t2 WHERE (t1.id = t.id_left) AND (t2.id = t.id_current) AND (t.id=id_player)
------------------------------------------------------------------------------------
на выходе получаешь:
- team_left - название команды, которую покинул игрок;
- team_current - название текущей команды игрока.
 

Sancho

Новичок
Не, я всё так и сделал (После подсказки Yurik'а;) ), просто fixxxer говорил про то, что, с его точки зрения, БД спроектирована неправильно, поэтому мне интересно, насколько всё-таки она грамотная, скажем так, по общественному мнению, и можно ли её сделать грамотней и нужно ли:D
 

Yurik

/dev/null
Sancho: ваше нечёткое изложение в первом посте может сбить с того что вы реально имели ввиду что fixxxer и раскритиковал. Думаю к вашей структуре у него придирок не будет (как и у меня)
 

Sancho

Новичок
Ааа, тогда понятно, спасибо за разъяснения:)

Кстати, Yurik, ко мне можно обращаться на "ты";)
 
Сверху