Как объединить результаты JOIN с другим набором результатов? - PullRequest
1 голос
/ 07 декабря 2011

У меня есть 2 таблицы, CLIENTS и MEMBERS.Мы пытаемся получить адрес участника из таблицы CLIENTS и все записи из таблицы MEMBERS, где ID из MEMBERS соответствует ID из CLIENTS.

Вв то же время, мы также хотели бы показать остальную информацию о члене из таблицы MEMBERS, где ID либо NULL, либо не существует в таблице CLIENTS.

Я думал, что следующий запрос сделает это, но он не получает все записи из MEMBERS таблиц:

SELECT c.ID
      ,m.ID
      ,m.fname
      ,m.lname
      ,m.address
      ,m.city
      ,m.state
      ,m.zip

 from Client c
inner join members m on c.id = m.id

UNION ALL

select '',m.* from members m

where m.id IS NULL or m.id NOT IN (select ca.id from clients ca) 

Что я делаю не так?

1 Ответ

0 голосов
/ 07 декабря 2011

Если я что-то упустил, похоже, вам просто нужно OUTER JOIN

SELECT COALESCE(c.ID, '') AS ID,
       m.ID,
       m.fname,
       m.lname,
       m.address,
       m.city,
       m.state,
       m.zip
FROM   members m
       LEFT OUTER JOIN Client c
         ON c.id = m.id  

Что касается вопроса в вашем вопросе, есть ли у вас NULL значения для id в таблице Clients? Это часто является причиной неожиданного NOT IN поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...