2012-06-15 72 views
22

Tôi đang cố gắng tìm các hàng có giá trị trùng lặp, nhưng chỉ dựa trên một số cột được chọn, không phải một cột đơn lẻ hoặc toàn bộ hàng. Ví dụ, nếu bàn của tôi trông như thế này:Tìm các hàng có cùng giá trị trong nhiều cột

ID  Address State Name 
------------------------------- 
0  7 Brown NY  John 
1  3 Red  WX  Jane 
2  7 Brown WX  Ted 
3  7 Brown NY  Fred 

Câu hỏi của tôi sẽ là:

Tìm tất cả ID cho hàng nơi Địa chỉ và Nhà nước lĩnh vực của hàng phù hợp Address và Nhà nước hàng khác.

Câu trả lời cho câu hỏi này sẽ là:

ID Address State Name 
------------------------------ 
0  7 Brown NY  John 
3  7 Brown NY  Fred 

Bất kỳ ý tưởng?

Gợi ý: How to select multiple columns values same rows from single table

Trả lời

27

Hãy thử như sau:

SELECT A.* 
FROM YourTable A 
INNER JOIN (SELECT Address, State 
      FROM YourTable 
      GROUP BY Address, State 
      HAVING COUNT(*) > 1) B 
ON A.Address = B.Address AND A.State = B.State 
+0

ok, trong khi những cả hai công việc tốt. Tôi nghĩ tôi sẽ gắn bó với cái này. Cảm ơn. – gunr2171

+2

Cách tốt hơn và đơn giản hơn để xử lý loại kịch bản này http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur – himanshupareek66

+1

@ himanshupareek66 Tôi không thấy sự khác biệt . Lý do cho việc tham gia ở đây chúng tôi bởi vì op muốn toàn bộ hàng nơi có bản sao, không chỉ địa chỉ và nhà nước – Lamak

2
select * 
from #table1 
where Addr + St in (select Addr + St as FullAddr 
      from #table1 
      group by Addr + St 
      having count(Addr+St) > 1) 
+0

có, điều này đã làm việc cho tôi, cảm ơn. – gunr2171

+2

Toán tử nối chuỗi trong SQL là '||' không phải '+'. Nhưng tốt hơn nên sử dụng 'where (addr, st) trong (select addr, st from ...)' anyway thay vì ghép chuỗi (có thể có vấn đề với một số kết hợp địa chỉ và trạng thái) –

Các vấn đề liên quan