2011-08-18 4 views
2

Je ne pouvais pas trouver comment mieux poser cette question, donc mes recherches sont devenues désespérées.Comment obtenir seulement des enregistrements répétés dans un tableau?

J'ai une table avec trois colonnes (Colonne1, Colonne2, Colonne3). Il y a beaucoup d'enregistrements composés de valeurs différentes et identiques. Je veux obtenir seulement les mêmes enregistrements que les valeurs column1, column2 et column3. Comment puis-je les obtenir dans la requête la plus rapide en général SQL? Et surtout HSQLDB? En outre, si ma table a 4 colonnes (+ Colonne4) mais j'ai toujours besoin des mêmes enregistrements des valeurs column1, column2 et column3. La requête doit changer ou sera-t-elle la même?

Exemple;

------------------------------- 
| Column1 | Column2 | Column3 | 
| 1 | 2 | 3  | <-- A 
| 2 | 2 | 30 | <-- B 
| 3 | 3 | 10 | 
| 4 | 12 | 3  | <-- C 
| 1 | 3 | 3  | 
| 1 | 4 | 3  | 
| 1 | 5 | 3  | 
| 4 | 12 | 3  | <-- C 
| 2 | 2 | 30 | <-- B 
| 1 | 2 | 3  | <-- A 
| 4 | 12 | 3  | <-- C 
------------------------------- 

donc je dois choisir tous A, B et C des enregistrements. Le résultat devrait être

------------------------------- 
| Column1 | Column2 | Column3 | 
| 1 | 2 | 3  | <-- A 
| 2 | 2 | 30 | <-- B 
| 4 | 12 | 3  | <-- C 
| 4 | 12 | 3  | <-- C 
| 2 | 2 | 30 | <-- B 
| 1 | 2 | 3  | <-- A 
| 4 | 12 | 3  | <-- C 
------------------------------- 

-Résultat complètement différent Records- omis

Répondre

1

les obtenir en regroupant, en combinaison avec une clause HAVING. Cela devrait également fonctionner dans HSQLDB. La clause HAVING supprime toutes les données du résultat une ligne n'est pas contenue plusieurs. Lorsque vous avez une table avec 4 colonnes, vous devez adopter l'instruction.

SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1 

EDIT: modifié pour obtenir toutes les lignes

SELECT x.* FROM Table x INNER JOIN (
    SELECT Column1,Column2,Column3 FROM Table GROUP BY Column1,Column2,Column3 HAVING COUNT(*)>1 
) y ON x.Column1=y.Column1 AND x.Column2=y.Column2 AND x.Column3=y.Column3 
+0

Ok, cela fonctionne avec 1 rangée. Mais j'ai besoin de voir tous les disques. –

+0

voir ma sélection – rabudde

1
SELECT Column1, Column2, Column3, count(*) from myTable 
GROUP BY Column1, Column2, Column3 

Vous pouvez omettre le Count(*) si vous ne se soucient pas du nombre. Est-ce ce que vous voulez?

C'était un peu difficile de comprendre ce que vous voulez. Pourriez-vous donner un exemple de résultat de sortie souhaité?

+0

J'ai ajouté un résultat comme je souhaite voir. –

Questions connexes