Вопрос с JOIN

Pavel_M

Новичок
Вопрос с JOIN

Доброго вечера господа.

Столкнулся с таким вопросом. Попробую описать сразу с примера.

Рассмотрим такую схему:

table user
------
user_id
user_name

table doctor
------
doctor_id
doctor_name

table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet


Получается 3 таблицы. Запрос будет следующего характера:
SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN doctor ON doctor.doctor_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC

Все работает замечательно. Но в реальном случае таблица с юзерами одна и называется просто user.

Получается такая схема:

table user
------
user_id
user_name
user_type


table vopros
------
vopros_id
vopros_client_id
vopros_doctor_id
vopros_text
vopros_otvet

SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
JOIN user ON user.user_id = vopros.vopros_doctor_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
ORDER BY vopros.vopros_id DESC

И уже такая схема не работае, оно и очевидно. Так как же сделать так, чтобы связи не были потеряны? На данным момент только остался один JOIN связывающий идентификатор по клиенту. А если запись доктора "случайно" удалиться?

-~{}~ 02.10.10 22:47:

Использовать подзапросы?

-~{}~ 02.10.10 22:51:

Получается так:
(реальный пример может отличаться от вышенаписанного)

SELECT *
FROM vopros
JOIN user ON user.user_id = vopros.vopros_client_id
WHERE vopros.vopros_client_id <> vopros.vopros_doctor_id
AND vopros_doctor_id = (SELECT user_id FROM user WHERE vopros_doctor_id = user_id)
ORDER BY vopros.vopros_id DESC

-~{}~ 02.10.10 22:54:

Но тут уже проблемы с вытаскиванием имени для юзера через один запрос
 

Вурдалак

Продвинутый новичок
Я никак не пойму почему «user», а не «polzovatel»?

Читай про алиасы к таблицам и LEFT JOIN.
 

dima-u

Новичок
еще раз подключи таблицу user

left join user u2 on u2.iser_id=vopros_doctor_id
 
Сверху