2012-06-15 71 views
22

我正在嘗試查找具有重複值的行,但僅基於選定的列數,而不是單列或整行。例如,如果我的表是這樣的:在多列中查找具有相同值的行

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

我的問題是:

找到所有的ID對其中行的地址和狀態域匹配的另一行的地址和狀態字段行。

這個問題的答案查詢是:

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

什麼想法?

建議: How to select multiple columns values same rows from single table

回答

27

嘗試以下操作:

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

確定,而這些都工作得很好。我想我會堅持這一個。謝謝。 – gunr2171

+2

更好,更簡單的方式來處理這種情況 http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur – himanshupareek66

+1

@ himanshupareek66我看不出差異。加入這裏的原因是因爲我們希望整行有重複的地址,而不僅僅是地址和狀態。 – 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

是的,這對我有用,謝謝。 – gunr2171

+2

SQL中的字符串連接運算符是'||'不是'+'。但是最好在where(addr,st)中使用where(addr,st from ...)'而不是連接字符串(這可能會對地址和狀態的某些組合產生問題) –

相關問題