2012-07-05 5 views
0

내 시나리오가 있습니다.SQL - '하드'코딩없이 중복을 제거 하시겠습니까?

저장 프로 시저 내에서 반환하려는 행이 3 개인 테이블이 있는데 행은 전자 메일, 이름 및 ID입니다. id는 3 또는 4 여야하며 일부 이메일은 여러 항목이 있으므로 사용자 당 이메일 만 사용해야합니다.

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

좋아 매우 간단 다음하지만 그 나타나는 경우 모두 3과 4는 그래서 그들은 두 번 표시 항목이이 두 번 난 단지 그 ID가 원하는 일부 사용자가 있기 때문에

는 내가 선택 문이 나머지 4 명 설명하기 어려운 또 다른 예를 아래에 제시 할 것입니다.

-

Email    Name Id 
[email protected] jimmy 4 
[email protected] brian 4 
[email protected] kevin 3 
[email protected] jimmy 3 

그래서 위의 시나리오에서 나는 3의 ID와 지미, 하드 코딩없이이 일을 어떤 방법을 무시할까요? 이것은 당신이 무엇을 달성하고자하는

감사

+0

? 태그를 사용하여 SQL 질문에 항상 _ 태그를 추가하십시오. 도움이 될 수있는 RDBMS의 추가 기능이있을 수 있습니다. – Ben

+0

죄송합니다 SQL Server는 T-SQL입니다. 모든 응답을 주셔서 감사합니다. Max (id)가 트릭을해야한다고 생각해 주셔서 대단히 감사합니다. – DtotheG

답변

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

OP 예제에서 MAX()를 사용해야합니다. – MatBailie

+0

이 수정되었습니다. 감사합니다. – Randy

+0

이것은 대우를 받았습니다. 고마워 :) – DtotheG

0

인가?

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

MySQL이 아닌 이상 반드시 * GROUP BY 이름이어야합니다. – MatBailie

+0

T-SQL에도 GROUP BY 이름이 있어야합니다. 또한 테이블 구조가 주어지면 다른 이메일 주소를 가진 동일한 이름을 고려하지 않을 수도 있습니다. – user1166147

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)와 함께 전에서 제공하는 솔루션은이 사건에 대한 좋은 소리. 대체 솔루션 일 수 있습니다.

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 

결과 : RDBMS는 (MySQL은, 오라클 등 ...)를 사용하는 어떤

email   name id 
------------------------------ 
[email protected] jimmy 4 
[email protected] brian 4 
[email protected] kevin 3 
관련 문제