2014-02-03 2 views
0

У меня возникают проблемы, пытаясь выбрать в три раза больше имени пользователя.sql возвращает три раза в тот же столбец

У меня есть таблица

JOBS (id, id_student, id_professor, id_professor2) 

Этот последний столбец является необязательным, то иногда NULL устанавливается в его содержании. Когда это произойдет, запрос не возвращает никаких строк. Однако, если id_professor2 установлен, запрос возвращается, как я ожидаю. Как я могу это исправить?

SELECT 
    p.name as professor, s.name as student, s_p.name as second_professor 
FROM 
    users as p 
JOIN 
    jobs ON (p.id = jobs.id_professor) 
JOIN 
    users as s ON (jobs.id_student = s.id) 
JOIN 
    users as s_p ON (s_p.id = jobs.id_professor2) 
WHERE 
    jobs.id = 2; 

Работа с id = 2 имеет второго профессора, поэтому запрос выполняется нормально. Но если изменение для jobs.id=3, запрос ничего не возвращает.

+0

Я исправил. Это произошло потому, что я добавил на английский язык для публикации здесь и забыли некоторые подробности. – ahmm95

+0

Я предполагаю, что 'пользователи как s_p ON (c.id = jobs.id_professor2)' должны 'пользователи как s_p ON (s.id = jobs.id_professor2)' тоже, так как 'c' никогда не псевдонимы .. – Milen

+0

Спасибо, Я исправил. Это должно быть s_p.id – ahmm95

ответ

1

Используйте левое внешнее соединение

SELECT p.name as professor, a.name as student, s_p.name as second_professor 
FROM users as p 
JOIN jobs ON(p.id = jobs.id_professor) 
JOIN users as s ON(jobs.id_student = a.id) 
left outer 
JOIN users as c ON(c.id = jobs.id_professor2) 
WHERE jobs.id = 2 
; 
+0

Спасибо, это сработало – ahmm95

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