SQL查询以返回包含来自一个字段的重复数据的所有行

SQL查询以返回包含来自一个字段的重复数据的所有行,sql,sql-server,Sql,Sql Server,我有一张有卡号和名字的桌子。其中一些名字是相同的,这意味着它们有多张卡片。如何选择名称多次出现的所有行?以下操作应有效: select count(*) as n, [name] from table1 group by [name] having n > 1 SELECT * FROM cards c1 INNER JOIN cards c2 on c1.name = c2.name WHERE c2.id <> c1.id

我有一张有卡号和名字的桌子。其中一些名字是相同的,这意味着它们有多张卡片。如何选择名称多次出现的所有行?

以下操作应有效:

select count(*) as n, [name]
from table1
group by [name]
having n > 1
SELECT        * 
FROM cards    c1 
INNER JOIN    cards c2 on c1.name = c2.name 
WHERE         c2.id <> c1.id

以下可能是您正在寻找的解决方案

Select * from CardTable where cardid in ( select cardid from CardTable group by cardid having count(cardid) > 1)
使用:


如果您需要整行,这里有一个解决方案,它将在sql 7及以上版本上工作

SELECT t1.* FROM(
 SELECT t.name
    FROM YourTable t
GROUP BY t.name
  HAVING COUNT(*) > 1) t2
  JOIN YourTable t1 on t2.name = t1.name

SQL Server不允许您引用GROUP BY或HAVING子句中的列别名-至少在SQL Server 2005上,您将获得无效的列名“n”。仅当您希望返回名称以外的列时,才需要子查询。-1:您的查询不起作用,并且不会返回任何行。countcardid=1,如果按cardid分组,则对所有行进行分组。如果您能解释为什么您认为查询会返回任何行,或者我错在哪里,我将非常乐意更正我的分数。你认为CARDID是一个名字还是ID?问题指出有卡号和名称。如果ANYselect count*from cards group by name>2此查询的性能是否与SELECT*from Your Table(MS SQL上的子查询中的t.name在哪里)的性能一样好?
SELECT t1.* FROM(
 SELECT t.name
    FROM YourTable t
GROUP BY t.name
  HAVING COUNT(*) > 1) t2
  JOIN YourTable t1 on t2.name = t1.name