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

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

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 ONLY

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 Ответ

1 голос
/ 11 июня 2019

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

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

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;

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

...