#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
.