Как выполнить обратное заполнение данных из SQL-объединения, только если количество полей равно 1 при обслуживании записей из предыдущих объединений?

У меня есть две таблицы, к которым я могу присоединиться следующим образом:

select * from 
(select * from table1 t1
left join table2 t2 on t1.id = t2.id )

Я хочу добавить третью таблицу, в которой я группирую по электронной почте, чтобы заполнить данные в объединении выше, но я хочу, чтобы они были заполнены только для записей, количество сообщений в которых составляет только 1. Если для разных записей существуют дублирующие адреса электронной почты, их следует исключить.

Я пытался этот запрос:

  select * from 
    (select * from table1 t1
    left join table2 t2 on t1.id = t2.id 
    inner join ((select email from table3 group by email
having count(*) =1) t3
     on t3.email = t1.emailaddress)

В этот момент, когда я объединяю поле электронной почты с другими в более крупном объединении, я все еще вижу записи, заполненные данными, при этом количество сообщений электронной почты, превышающее 1, будет заполнено.

т.е.

таблица только из LEFT JOIN:

email      missing_id 
a@a.com 
b@b.com

ТОЛЬКО данные table3

email       missing_id
a@a.com        1
a@a.com        2
b@b.com        3

Все таблицы, объединенные, где электронная почта встречается только один раз, должны заполнить данные в левом соединении, как показано ниже:

email      missing_id 
a@a.com       
b@b.com        3

1 ответ

Решение

Во-первых, ваш первый запрос вернет ошибку почти в любой базе данных, потому что в подзапросе у вас будет два столбца с одинаковым именем. Но я понял.

Если я правильно понимаю, это должно делать то, что вы хотите:

select . . ., t3.id as missing_id
from table1 t1 left join
     table2 t2
     on t1.id = t2.id left join
     (select t3.email, max(t3.id) as id
      from table3 t3
      group by t3.email
      having count(*) = 1
     ) t3
     on t3.email = t1.emailaddress;

Это очень близко к вашему запросу, поэтому я не уверен, что это что-нибудь исправит.

Другие вопросы по тегам