postgresql внутреннее соединение и левое соединение - PullRequest
0 голосов
/ 13 ноября 2018

У меня следующая структура базы данных с postgres 9.5:

create table users (
  id character varying(255), 
  email character varying(127)
);

create table org_users(
  id character varying(255), 
  user_id character varying(255), -- foreign key to users.id
  manager_org_user_id character varying(255) -- refers to org_users.id; same table referential dependency
);

insert into users (id, email) values ('111', 'user1@example.com');
insert into users (id, email) values ('222', 'user2@example.com');
insert into users (id, email) values ('333', 'manager@example.com');

insert into org_users (id, user_id, manager_org_user_id) values ('o1', '111', 'o3');
insert into org_users (id, user_id, manager_org_user_id) values ('o2', '222', 'o3');
insert into org_users (id, user_id, manager_org_user_id) values ('o3', '333', null);

В моей таблице три пользователя. user1@example.com, user2@example.com - два обычных пользователя. manager@example.com их менеджер. Теперь я хочу отобразить следующую структуру:

org_user_id, employee_user_id, employee_email, manager_org_user_id, manager_user_id, manager_email

Я попытался с помощью следующего SQL-запроса, но он не работает для меня с syntax error near JOIN. Любая помощь?

select ou.id as employee_org_user_id,
    us.id as employee_user_id, 
    us.email as employee_email, 
    ou.manager_org_user_id as manager_org_user_id,
    u2.email as manager_email
from org_users ou 
    JOIN users us ON ou.user_id::text = us.id::text,
    LEFT JOIN org_users ou1 ON ou1.id::text = ou.manager_org_user_id::text
    LEFT JOIN users us2 ON ou1.user_id::text = us2.id::text;

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Этот запрос разрешит вашу проблему:

SELECT ou.id as employee_org_user_id,
       us.id as employee_user_id, 
       us.email as employee_email, 
       ou.manager_org_user_id as manager_org_user_id
FROM org_users ou JOIN users us ON ou.user_id = us.id

Пример в реальном времени:

0 голосов
/ 13 ноября 2018

Удалить пробел, переименовать u2.email, перетащить приведение к тексту:

select ou.id as employee_org_user_id,
    us.id as employee_user_id, 
    us.email as employee_email, 
    ou.manager_org_user_id as manager_org_user_id,
    us2.email as manager_email
from org_users ou 
    JOIN users us ON ou.user_id = us.id
    LEFT JOIN org_users ou1 ON ou1.id = ou.manager_org_user_id
    LEFT JOIN users us2 ON ou1.user_id = us2.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...