SQL - 删除没有'硬'编码的重复?

时间:2012-07-05 20:44:21

标签: sql duplicates where procedure clause

继承我的情景。

我有一个包含3行的表,我想在存储过程中返回,行是电子邮件,名称和ID。 id必须= 3或4,并且电子邮件必须仅限每个用户,因为有些人有多个条目。

我有一个Select语句如下

SELECT
     DISTINCT email,
     name,
     id
from table
where
     id = 3
     or id = 4

好的相当简单,但有一些用户的条目同时为3和4,所以它们出现两次,如果它们出现两次,我只想要剩下4个ID的用户。我将在下面给出另一个例子,因为它难以解释。

表 -

Email              Name    Id
jimmy@domain.com   jimmy   4
brian@domain.com   brian   4
kevin@domain.com   kevin   3
jimmy@domain.com   jimmy   3

所以在上面的场景中,我想忽略id为3的jimmy,没有硬编码的任何方式吗?

由于

4 个答案:

答案 0 :(得分:2)

SELECT
     email,
     name,
     max(id)
from table
where
     id in( 3, 4 )
group by email, name

答案 1 :(得分:0)

这是你想要达到的目标吗?

SELECT Email, Name, MAX(Id) FROM Table WHERE Id IN (3, 4) GROUP BY Email;

答案 2 :(得分:0)

有时使用Having Count(*) > 1可能有助于查找重复的记录。

select * from table group by Email having count(*) > 1

select * from table group by Email having count(*) > 1 and id > 3.

之前提供的解决方案与表格中的选择MAX(ID)听起来很适合这种情况。 这可能是另一种解决方案。

答案 3 :(得分:0)

您使用的是什么RDMS? 这将只返回一个“吉米”,使用RANK()

SELECT A.email, A.name,A.id
FROM SO_Table A
INNER JOIN(
SELECT 
email, name,id,RANK() OVER (Partition BY name ORDER BY ID DESC) AS COUNTER
FROM SO_Table B  
) X ON X.ID = A.ID AND X.NAME = A.NAME
WHERE X.COUNTER = 1

返回:

 email          name    id
 ------------------------------
 jimmy@domain.com   jimmy   4
 brian@domain.com   brian   4
 kevin@domain.com   kevin   3