열 값이 고유하지 않은 모든 행을 반환하는 select 문을 실행해야합니다 (예 : EmailAddress).
예를 들어, 테이블이 다음과 같은 경우
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
답변
이것은 EXISTS
방법 보다 훨씬 빠릅니다 .
SELECT [EmailAddress], [CustomerName] FROM [Customers] WHERE [EmailAddress] IN
(SELECT [EmailAddress] FROM [Customers] GROUP BY [EmailAddress] HAVING COUNT(*) > 1)
답변
쿼리에서 잘못된 것은 전자 메일 및 이름으로 그룹화하는 것입니다. 전자 메일 및 이름별로 그룹화되어 고유 한 전자 메일 집합 및 이름 그룹이 결합되어
aaron and aaron@gmail.com
christy and aaron@gmail.com
john and aaron@gmail.com
하나의 단일 그룹에 속하는 3 개의 다른 그룹으로 취급됩니다.
아래 주어진 쿼리를 사용하십시오 :
select emailaddress,customername from customers where emailaddress in
(select emailaddress from customers group by emailaddress having count(*) > 1)
답변
어때요?
SELECT EmailAddress, CustomerName FROM Customers a
WHERE Exists ( SELECT emailAddress FROM customers c WHERE a.customerName != c.customerName AND a.EmailAddress = c.EmailAddress)
답변
select CustomerName,count(1) from Customers group by CustomerName having count(1) > 1
답변
재미를 위해 다른 방법이 있습니다.
;with counts as (
select CustomerName, EmailAddress,
count(*) over (partition by EmailAddress) as num
from Customers
)
select CustomerName, EmailAddress
from counts
where num > 1
답변
레코드가 큰 쿼리 시간을 늘리는 조건에서 하위 쿼리를 사용하는 대신
이 문제에 대한 더 나은 옵션으로 Inner Join을 사용하는 것이 좋습니다.
동일한 테이블을 고려하면 결과를 얻을 수 있습니다.
SELECT EmailAddress, CustomerName FROM Customers as a
Inner Join Customers as b on a.CustomerName <> b.CustomerName and a.EmailAddress = b.EmailAddress
더 나은 결과를 얻으 CustomerID
려면 테이블의 고유 한 필드 또는 사용하는 것이 좋습니다 . 복제 CustomerName
가 가능합니다.
답변
고유하지 않은 행을 찾기 위해 약간의 변경이 있습니다.
SELECT EmailAddress, CustomerName FROM Customers WHERE EmailAddress NOT IN
(SELECT EmailAddress FROM Customers GROUP BY EmailAddress HAVING COUNT(*) > 1)