2013-07-12 2 views
0

Я не профессионал в SQL, но я играю со следующими SELECT:MySQL JOIN: несколько полей же имя

SELECT 
     certificate.id, 
     certificate.date_created, 
     certificate.date_approved, 
     certificate.notes, 
     certificate.id_user_student, 
     certificate.id_user_exm, 
     certificate.id_user_eval, 

     user.name AS student_name, 
     user.name AS exm_name, 
     user.name AS eval_name 

     FROM certificate 
     LEFT JOIN 
      user ON certificate.id_user_student = user.id AND 
        certificate.id_user_exm = user.id AND 
        certificate.id_user_eval = user.id 

Мой Ideia с этим, чтобы быть в состоянии взять name столбец из таблицу user и JOIN в таблицу certificate для всех полей идентификатора пользователя.

В таблице certificate столбцы id_user_student, id_user_exm, id_user_eval содержат идентификаторы пользователя доступны на столе user, и я хочу, чтобы их имена на наборе результатов.

Мой текущий запрос работает только для первого результата. Может ли кто-нибудь сказать мне, как я могу это исправить?

Спасибо!

+0

INNER JOIN? Кроме того, не уверен, почему идентификатор должен соответствовать всем трем id_user_student, id_user_exm, id_user_eval .... рассмотрите нормализацию таблицы сертификатов, чтобы ваше условие ON просто соответствовало одному первичному ключу с одним внешним ключом. –

+1

@ A.O. Я думаю, что OP хочет получить отдельный поиск имен для каждого из трех столбцов внешнего ключа. – spencer7593

+0

@ spencer7593 вы правы, потому что все ученики, emxs и evals являются людьми на «пользовательской» таблице, и все они вовлечены в процесс сертификации. ;) – TCB13

ответ

2

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

SELECT c.id 
    , c.date_created 
    , c.date_approved 
    , c.notes 
    , c.id_user_student 
    , c.id_user_exm 
    , c.id_user_eval 
    , s.name AS student_name 
    , e.name AS exm_name 
    , v.name AS eval_name 
    FROM certificate c 
    LEFT 
    JOIN user s ON s.id = c.id_user_student 
    LEFT 
    JOIN user e ON e.id = c.id_user_exm 
    LEFT 
    JOIN user v ON v.id = c.id_user_eval 
+0

Спасибо! Это сработало очень хорошо! – TCB13

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