[英]SELECT with LEFT JOIN with two tables without duplicates
我有两张桌子。 除了 email 之外,两者都有不同的值。 我来自两个表的 select 与同一个 email 上的第二个表的左连接。 不幸的是,第一个表中有重复的电子邮件。
+-------+----------+------+
| email | address | id |
+-------+----------+------+
| a | a | 1 |
| b | b | 2 |
| c | c | 3 |
| a | d | 4 |
+-------+----------+------+
+-------+----------+------+
| email | password | etc |
+-------+----------+------+
| a | a | 1 |
| b | b | 2 |
| c | c | 3 |
| d | d | 4 |
+-------+----------+------+
我的目标是每个 email 只获得不同的行,选择 table1 的最高 id 行
到目前为止,我的查询看起来像这样:
SELECT t2.email, t1.address, t2.city
FROM t1
LEFT JOIN t2 ON t1.email = t2.email
WHERE t1.email IS NOT NULL
如果没有这些重复项,我如何获得想要的结果?
编辑
+-------+----------+------------+
| email | address | password |
+-------+----------+------------+
| a | a | 1 |
| b | b | 2 |
| c | c | 3 |
| d | d | 4 |
+-------+----------+------------+
我猜你想要这样的东西:
select t2.*, t1.*
from t2 left join
(select t1.*, row_number() over (partition by email order by id desc) as seqnum
from t1
) t1
on t1.email = t2.email and t1.seqnum = 1;
row_number()
是一个 window function ,它为具有相同 email 的行分配一个序号 - 最高id
递减为“1”,然后随着递增。 这标识了具有最大 id 的行,并且seqnum = 1
仅检索每个email
的该行。
你可以这样做:
select temp.email, t1.address, t2.password from
(select max(id) as max_id, email from table1
group by email) temp
Left join table1 t1 on t1.id = temp.max_id
Left join table2 t2 on t2.email = temp.email
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.