[РЕДАКТИРОВАТЬ]
Теперь я обнаружил недостаток в этом подходе.Это хорошо работает, когда для каждой позиции определен член экипажа, но полностью пропускает ряды, в которых некоторые позиции экипажа не заполнены.
Это нежелательно, только с точки зрения того, что в каждом экипаже должен быть лидер экипажа.и водитель, но любая другая позиция после этого может быть пустой.
Есть мысли о том, как это сделать?Читая, похоже, мне, возможно, придется смоделировать какое-то полное внешнее объединение.
[ORIGINAL]
В моей базе данных есть таблица для пользователей (называемая ign_users):
-----------------------------------
¦ user_id ¦ RealName ¦ surname ¦
-----------------------------------
¦ 1 ¦ Alpha ¦ Smith ¦
-----------------------------------
¦ 2 ¦ Bravo ¦ Jones ¦
-----------------------------------
¦ 3 ¦ Charlie ¦ Brown ¦
-----------------------------------
¦ 4 ¦ Delta ¦ White ¦
-----------------------------------
Я создал новую таблицу для создания экипажей (называемую as_crew):
------------------------------------------------
¦ name ¦ crew_leader ¦ driver ¦ crew3 ¦ crew4 ¦
------------------------------------------------
¦ A ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦
------------------------------------------------
¦ B ¦ 2 ¦ 4 ¦ 1 ¦ 2 ¦
------------------------------------------------
Что я хочу сделать, так это объединить их, чтобы я получил полное имя (т. Е. RealNameи фамилия) для каждого члена экипажа.
Я могу сделать это по одному человеку за раз.Например, следующее вернет полное имя лидера команды:
SELECT c.name, CONCAT(u.RealName, ' ', surname)
FROM as_crew c, ign_users u
WHERE c.crew_leader=u.user_id
Однако, я получаю ошибки, когда пытаюсь соединить это с другим запросом, например:
SELECT c.name, CONCAT(u.RealName, ' ', surname)
FROM as_crew c, ign_users u
WHERE c.crew_leader=u.user_id
JOIN
(SELECT c.name, CONCAT(u.RealName, ' ', surname)
FROM as_crew c, ign_users u
WHERE c.DRIVER=u.user_id) AS t
ON c.name=t.name
Я думаю, что это связано с предложениями WHERE, но я не могу понять, как получить этот результат, если я просто извлекаю их из операторов SELECT и помещаю их снаружи.
Для crew3 и crew4(и другие - они идут к команде8), я просто хочу объединить команду в один результат.
Спасибо.