2010-05-11 4 views

Répondre

4

suivant peut être la solution que vous cherchez

Select * from CardTable where cardid in (select cardid from CardTable group by cardid having count(cardid) > 1) 
+0

La sous-requête n'est nécessaire que si vous voulez retourner colonnes autres que le nom. –

+0

-1: Votre requête ne fonctionne pas et ne retournera aucune ligne. count (cardid) = 1 si group par cardid, pour toutes les lignes. – Unreason

+0

Je pense que vous avez besoin de lire correctement la question –

0
select count(*) as n, [name] 
from table1 
group by [name] 
having n > 1 
+2

SQL Server ne vous permet pas de faire référence à des alias de colonne dans le GROUP BY ou HAVING - vous obtiendrez « nom de colonne non valide « n » », au moins sur SQL Server 2005. –

1

Ce qui suit devrait fonctionner:

SELECT  * 
FROM cards c1 
INNER JOIN cards c2 on c1.name = c2.name 
WHERE   c2.id <> c1.id 
+0

vous obtiendrez les résultats plusieurs fois si ANY (sélectionnez count (*) des cartes groupées par nom)> 2 – Unreason

+0

SELECT DISTINCT (c1.id) ... le fera fonctionner – Unreason

2

Utilisation:

SELECT t.name 
    FROM TABLE t 
GROUP BY t.name 
    HAVING COUNT(*) > 1 
0

si vous avez besoin des rangées entières , voici une solution qui fonctionnera sur s ql 7 et jusqu'à

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 
+0

Les performances de cette requête sont-elles aussi bonnes que SELECT * FROM YourTable WHERE t.nom IN (sous-requête) sur MS SQL? – Unreason

Questions connexes