SQL-如何从联接表中删除重复项

时间:2018-08-23 01:57:39

标签: sql duplicates

想象一下,您正在联接来自DB1和DB2的两个表,如下所示:

SELECT
 DB1.CRE1,
 DB2.CRE2,
 DB2.DAY2
FROM DB1
JOIN DB2 ON DB1.KEY1 = DB2.KEY2
;

我得到的结果如下:

DB1.CRE1---DB2.CRE2---DB2.DAY2
CRE1_A-----CRE2_A-----SEP01
CRE1_A-----CRE2_A-----SEP02
...

上面看到的是,DB1.CRE1的1个值与DB2.CRE2的多个值匹配,因为同一个DB2.CRE2关联的日期不同。 我正在寻找以下解决方案: -根据给定条件匹配2个表DB1.KEY1 = DB2.KEY2,然后; -从DB2.CRE2中删除重复的值,并且仅采用与DB2.CRE2相关的最早的最早日期(DB2.DAY2),例如上述示例中的SEP01。

不确定是否可行,但希望能为您提供帮助。

谢谢

托尼

1 个答案:

答案 0 :(得分:0)

一种方法将WHERE子句与相关子查询一起使用:

SELECT DB1.CRE1, DB2.CRE2, DB2.DAY2
FROM DB1 JOIN
     DB2
     ON DB1.KEY1 = DB2.KEY2
WHERE DB2.DAY2 = (SELECT MIN(D2.DAY2)
                  FROM DB2 D2
                  WHERE D2.KEY2 = DB2.KEY2
                 );

子查询为每个DAY2计算最小值KEY2。  外部查询仅返回与每个DAY2相匹配的KEY2的行。