2011-12-27 2 views
0

У меня есть две таблицы, игры и ПОЛЬЗОВАТЕЛЕЙ установить со следующими полями:MySQL таблицы запроса присоединиться к

tblGAMES--> 
GAME_ID (int) primary key, 
P1_ID (int), 
P2_ID (int), 
P3_ID (int), 
P4_ID (int) 

tblUSERS--> 
USER_ID (int) primary key, 
FIRST_NAME (text), 
LAST_NAME (text) 

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

GAME_ID:1, P1:1, P2:2, P3:3, P4:4 

но вместо распечатки идентификатор, который хранится в tblGAMES я хотел бы напечатать первое название каждого игрока, как он появляется в соответствующей строке в tblUSERS. это выполнимо, используя один запрос, а не mulitple-запросы?

end result-->GAME_ID:1, P1:David, P2:Paul, P3:John, P4:Bobby 

ответ

1

Вы должны присоединиться к таблице пользователей в 4 раза ...

select g.GAME_ID, 
     u1.FIRST_NAME as ulname, 
     u2.FIRST_NAME as u2name, 
     u3.FIRST_NAME as u3name, 
     u4.FIRST_NAME as u4name 
from tblGAMES as g 
    left join tblUSERS as u1 on g.P1_ID =u1.USER_ID 
    left join tblUSERS as u2 on g.P2_ID =u2.USER_ID 
    left join tblUSERS as u3 on g.P3_ID =u3.USER_ID 
    left join tblUSERS as u4 on g.P4_ID =u4.USER_ID 

(непроверенные)

1

В запросе вы собираетесь хотите сослаться на tblUSERS один раз в JOIN , Что-то вроде этого:

SELECT 
    tblGAMES.GAME_ID, 
    tblUSER1.FIRST_NAME AS P1, 
    tblUSER2.FIRST_NAME AS P2, 
    tblUSER3.FIRST_NAME AS P3, 
    tblUSER4.FIRST_NAME AS P4 
FROM tblGAMES 
    INNER JOIN tblUSERS AS tblUSER1 ON tblGAMES.P1_ID = tblUSER1.USER_ID 
    INNER JOIN tblUSERS AS tblUSER2 ON tblGAMES.P2_ID = tblUSER2.USER_ID 
    INNER JOIN tblUSERS AS tblUSER3 ON tblGAMES.P3_ID = tblUSER3.USER_ID 
    INNER JOIN tblUSERS AS tblUSER4 ON tblGAMES.P4_ID = tblUSER4.USER_ID 

Обратите внимание, что мой синтаксис может понадобиться немного настройки, я не написал достаточно MySQL недавно от руки его 100% надежно. Но ты получил идею. Каждое соединение добавляется к общему продукту независимо.

Вы также можете изменить типы JOIN в зависимости от того, насколько необходим каждый игрок. Например, если в некоторых играх есть 2 игрока, то вы хотите, чтобы они были LEFT OUTER JOIN с вместо этого, чтобы лучше обрабатывать значения null и т. Д.

Смежные вопросы