Каким должно быть условие соединения apt?

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть 2 таблицы следующего формата:

Таблица 1:

 Id1  Id2   Sent_Email    Date
123   22     1            24-Oct
234   11     1            24-Oct
  

Таблица 2:

 Id1  Id2   Open_Email    Date
123   22     1           24 Oct
123   22     1           24 Oct
1234  01     1           24 Oct
  

Слева соединяем таблицу 1 с таблицей 2 для Id1 и id2
Я получаю:

 Id1  Id2   Open_Email  Sent Email  Date
123   22     1         1           24 Oct
123   22     1         1           24 Oct
  

Какие изменения я должен внести, если мне нужна только одна запись в моем out для них?
Желаемый результат:

 Id1  Id2   Open_Email  Sent Email  Date
123   22     1         1           24 Oct
  

Комментарии:

1. используйте select distinct ....

2. Пожалуйста, покажите свое «левое соединение». Если это неверно, у вас должен быть либо идентификатор 234, либо 1234 в результатах.

Ответ №1:

Используйте distinct select оператор with, как показано ниже:

 select 
distinct 
t1.id1, t1.id2, t1.open_email, t2.sent_email, date from 
table1 t1 left join table2 t2 on t1.id1=t2.id1 and t1.id2=t2.id2
  

Примечание: — Согласно образцу данных и выходных данных, inner join вместо left join .

Ответ №2:

Я бы удалил дубликаты из таблицы2 перед присоединением:

 select t1.*, t2.open_email
from table1 t1 join
     (select distinct t2.id1, t2.id2, t2.open_email
      from table2 t2
     ) t2
     on t1.id1 = t2.id1 and t1.id2 = t2.id2;
  

Я подозреваю, что это может оптимизировать лучше, чем group by после join .