program story

SQL Union에서 중복 제거

inputbox 2021. 1. 5. 08:05
반응형

SQL Union에서 중복 제거


나는 유니온을 사용하여 내가 가지고있는 몇 가지 테이블에서 기본 SQL을 수행하고 있습니다 (올바르게 또는 잘못)

하지만 중복을 제거해야합니다. 어떤 아이디어?

select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4 
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4

Union중복을 제거합니다. Union All하지 않습니다.


사용은 UNION사용자가 지정하지 않는 한 자동으로 중복 행을 제거 UNION ALL: http://msdn.microsoft.com/en-us/library/ms180026(SQL.90).aspx


다른 사람들은 이미 직접적인 질문에 대답했지만 질문을 제거하기 위해 쿼리를 단순화 할 수 있습니다 (또는 내가 뭔가를 놓친 적이 있고 다음과 같은 쿼리가 실제로 다른 결과를 생성합니까?).

select * 
    from calls c join users u
        on c.assigned_to = u.user_id 
        or c.requestor_id = u.user_id
    where u.dept = 4

T-SQL을 사용하는 경우 UNION이 중복을 제거하는 이전 게시물에서 나타납니다. 그러나 그렇지 않은 경우 구별을 사용할 수 있습니다. 이것은 나에게도 옳지 않다고 느껴지지만 원하는 결과를 얻을 수 있습니다.

SELECT DISTINCT *
FROM
(
select * from calls
left join users a on calls.assigned_to= a.user_id
where a.dept = 4 
union
select * from calls
left join users r on calls.requestor_id= r.user_id
where r.dept = 4
)a

당신은 여전히 ​​중복을 얻고 있기 때문에 UNION나는 다음을 확인합니다.

  • 그것들이 정확히 중복된다는 것. 내 말은, 만약 당신이

    SELECT DISTINCT * FROM (<your query>) AS subquery

    파일 수가 적습니까?

  • 쿼리의 첫 번째 부분에 이미 중복 항목이 없음 (왼쪽 조인에 의해 생성 될 수 있음). 내가 이해했듯이 UNION이미있는 결과 집합 행에 추가되지는 않지만 첫 번째 데이터 집합에 이미있는 중복 항목은 제거되지 않습니다.


T-SQL을 사용하는 경우 저장 프로 시저에서 임시 테이블을 사용하고 그에 따라 쿼리 레코드를 업데이트하거나 삽입 할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/4127714/remove-duplicates-from-sql-union

반응형