Использование третьей таблицы в простом левом внешнем соединении - PullRequest
0 голосов
/ 08 мая 2019

У меня есть простой sql, который подходит, но мне нужны данные из другой таблицы, и ниже приводится ошибка: уловка в том, что у каждого people_id может быть более одного имени_программы (мы являемся агентством со многими программами). Я хочу показать полное имя , информация alt_id и программы, в которых они находятся. Я хочу показать программы, даже если у них нет alt_id.

select b.*, c.program_name, a.full_name 
from all_clients_view a 
left outer join alt_id_view b
on a.people_id = b.people_id

***, пока здесь все в порядке. Эта часть дает ошибку:

Where a.people_id IN (select program_name
                      from program_enrollment_view c
                      where a.people_id = c.people_id)

Ошибка:

Не удалось связать многоэлементный идентификатор "c.program_name".

1 Ответ

1 голос
/ 08 мая 2019

Я подозреваю, что вы просто хотите exists:

where exists (select 1
              from program_enrollment_view pev
              where a.people_id = pev.people_id
             )

Сравнение "people_id" с "program_name" не имеет смысла для меня.

Если вы хотите вернуть имя программы, вам нужно дополнительно join:

select ac.full_name, ai.*, pev.program_name, 
from all_clients_view ac left join
     alt_id_view ai
     on ac.people_id = ai.people_id left join
     program_enrollment_view pev
     on ac.people_id = pev.people_id;

Примечания:

  • Здесь используются подходящие псевдонимы таблиц, а не a, b и c. Настоятельно рекомендуется!
  • Вы хотите left join представление program_enrollment_view, если хотите строки без совпадений.
  • Поскольку вы выбираете * из второй таблицы, я предполагаю, что inner join является более подходящим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...