@sashavol

Как получить дважды одну и ту же таблицу с JOIN?

Добрый вечер, столкнулся с очередной задачей с запросом sql, который я решил усложнить и у меня все сломалось. Использую Postgresql, но значения я думаю это не имеет.

У меня был следующий запрос, где "car" содержала client_id столбик таблицы "client":
SELECT
                client.someone_field, 
                car.*
            FROM car
                INNER JOIN client ON client.id = car.client_id 
            WHERE 1=1 ';

Запрос простой, возвращает данные из связанной по id данные из второй таблицы.

Но нужно сделать ещё одну привязку с той же второй таблицей (client), но уже через связывающую таблицу, я прикинул это так:
SELECT
                client.someone_field, // данные от первой связки
                client_second.someone_field // данные от второй связки
                car.*
            FROM car
                INNER JOIN client ON client.id = car.client_id 
                INNER JOIN client_car ON client_car.car_id = car.id  // связывающая таблица которая имеет id одного поля и id другого поля (один к одному)
                INNER JOIN client client_second ON client_second.id = client_car.client_id // тут пытаюсь взять ID с противоположного столбика у связывающей таблицей и сравнить с таблицей client
            WHERE 1=1 ';


Собственно, кто осилил, такой запрос ничего не возвращает. Если это перевести в логику, то первый join это получаем владельца текущего "car", следующие 2 JOIN подразумевались для получения уже того кто управляет текущим "car".
  • Вопрос задан
  • 2174 просмотра
Решения вопроса 1
xez
@xez
TL Junior Roo
Join не совсем верный.
Попробуйте вот так:
SELECT
                client.someone_field, // данные от первой связки
                client_second.someone_field // данные от второй связки
                car.*
            FROM car
                JOIN client ON client.id = car.client_id 
                JOIN client_car ON client_car.car_id = car.id 
                JOIN client_second ON client_second.id = client_car.client_id 
            WHERE 1=1;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы