在多列中查找具有相同值的行

gun*_*171 30 sql sql-server

我试图找到具有重复值的行,但仅基于选定数量的列,而不是单个列或整个行.例如,如果我的表看起来像这样:

ID     Address    State    Name
-------------------------------
0      7 Brown    NY       John
1      3 Red      WX       Jane
2      7 Brown    WX       Ted
3      7 Brown    NY       Fred
Run Code Online (Sandbox Code Playgroud)

我的问题是:

查找行的地址和状态字段与另一行的地址和状态字段匹配的行的所有ID.

这个查询的答案是:

ID    Address    State    Name
------------------------------
0     7 Brown    NY       John
3     7 Brown    NY       Fred
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

建议: 如何从单个表中选择多个列值相同的行

Lam*_*mak 41

请尝试以下方法:

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
Run Code Online (Sandbox Code Playgroud)

  • 更好,更简单的方法来处理这种情况http://stackoverflow.com/questions/13807314/find-rows-where-the-same-two-column-values-recur (4认同)
  • @ himanshupareek66我看不到区别。之所以加入这里,是因为op希望整个行都有重复项,而不仅仅是地址和状态 (2认同)

SQL*_*ous 5

select *
from #table1
where Addr + St in (select Addr + St as FullAddr
             from #table1
             group by Addr + St
             having count(Addr+St) > 1)
Run Code Online (Sandbox Code Playgroud)

  • SQL中的字符串连接运算符是`||`而非`+`。但是最好还是使用`where(addr,st)in(select addr,st from ...)`,而不是串联字符串(这可能会对地址和状态的某些组合产生问题) (3认同)