복붙노트

[SQL] 어떻게 선택 모든 행에 열 값이 고유없는 경우에는

SQL

어떻게 선택 모든 행에 열 값이 고유없는 경우에는

나는 열 값이 구별없는 모든 행 (예를 들어, EmailAddress를)을 반환하는 SELECT 문을 실행해야합니다.

예를 들어, 테이블 모양은 다음과 같은 경우 :

CustomerName     EmailAddress
Aaron            aaron@gmail.com
Christy          aaron@gmail.com
Jason            jason@gmail.com
Eric             eric@gmail.com
John             aaron@gmail.com

나는 복귀에 대한 질의를 필요로한다 :

Aaron            aaron@gmail.com
Christy          aaron@gmail.com
John             aaron@gmail.com

나는 많은 글을 읽고 아무 ​​소용이 다른 쿼리를 시도했습니다. 내가 일을한다고 생각하는 질의는 다음과 같습니다. 누군가가 대안을 제안 또는 내 쿼리 문제가 될 수 있습니다 무엇을 말해 줄 수 있습니까?

select EmailAddress, CustomerName from Customers
group by EmailAddress, CustomerName
having COUNT(distinct(EmailAddress)) > 1

해결법

  1. ==============================

    1.이것은이 방법 EXISTS보다 훨씬 빠르다 :

    이것은이 방법 EXISTS보다 훨씬 빠르다 :

    SELECT [EmailAddress], [CustomerName] FROM [Customers] WHERE [EmailAddress] IN
      (SELECT [EmailAddress] FROM [Customers] GROUP BY [EmailAddress] HAVING COUNT(*) > 1)
    
  2. ==============================

    2.귀하의 요청에 잘못된 것은 당신이 이메일과 이름으로 그룹화되어 이메일과 이름의 각각의 고유 한 세트의 그룹이 함께 따라서 결합 된 형태 있다는 점이다

    귀하의 요청에 잘못된 것은 당신이 이메일과 이름으로 그룹화되어 이메일과 이름의 각각의 고유 한 세트의 그룹이 함께 따라서 결합 된 형태 있다는 점이다

    aaron and aaron@gmail.com
    christy and aaron@gmail.com
    john and aaron@gmail.com
    

    오히려 모든 단일 1 개 그룹에 속하는 3 개 개의 그룹으로 취급된다.

    아래에 주어진 쿼리를 사용하십시오 :

    select emailaddress,customername from customers where emailaddress in
    (select emailaddress from customers group by emailaddress having count(*) > 1)
    
  3. ==============================

    3.방법에 대한

    방법에 대한

    SELECT EmailAddress, CustomerName FROM Customers a
    WHERE Exists ( SELECT emailAddress FROM customers c WHERE a.customerName != c.customerName AND a.EmailAddress = c.EmailAddress)
    
  4. ==============================

    4.

    select CustomerName,count(1) from Customers group by CustomerName having count(1) > 1
    
  5. ==============================

    5.그냥 재미를 위해, 여기 또 다른 방법이있다 :

    그냥 재미를 위해, 여기 또 다른 방법이있다 :

    ;with counts as (
        select CustomerName, EmailAddress,
          count(*) over (partition by EmailAddress) as num
        from Customers
    )
    select CustomerName, EmailAddress
    from counts
    where num > 1
    
  6. ==============================

    6.오히려 기록이 거대 쿼리 시간을 증가 곳 조건에 서브 쿼리를 사용하는 것보다.

    오히려 기록이 거대 쿼리 시간을 증가 곳 조건에 서브 쿼리를 사용하는 것보다.

    나는 내부가이 문제에 대한 더 나은 옵션으로 참가를 사용하는 것이 좋습니다 것입니다.

    같은 테이블을 고려하면이 결과를 줄 수

    SELECT EmailAddress, CustomerName FROM Customers as a 
    Inner Join Customers as b on a.CustomerName <> b.CustomerName and a.EmailAddress = b.EmailAddress
    

    여전히 더 나은 결과를 위해 나는 당신의 CustomerID 또는 테이블의 고유 필드를 사용하는 것이 좋습니다 것입니다. CUSTOMERNAME의 중복이 가능합니다.

  7. ==============================

    7.음이 아닌 별개의 행을 찾을 수있는 약간의 변화가 ..

    음이 아닌 별개의 행을 찾을 수있는 약간의 변화가 ..

    SELECT EmailAddress, CustomerName FROM Customers WHERE EmailAddress NOT IN
    (SELECT EmailAddress FROM Customers GROUP BY EmailAddress HAVING COUNT(*) > 1)
    
  8. from https://stackoverflow.com/questions/13146304/how-to-select-every-row-where-column-value-is-not-distinct by cc-by-sa and MIT license