Bête requete ... - SQL/NoSQL - Programmation
Marsh Posté le 22-02-2009 à 13:07:43
Avec quelle base de données ? 
 
Ca ne passe pas car count(*) ne fait pas parti des colonnes du résultat, et que Having est un traitement qui se base sur ces colonnes. 
 
A la place, essayer :
| Select distinct A, B, C, D from latable T1, latable T2  | 
Marsh Posté le 23-02-2009 à 13:57:46
Essaie ça aussi  
=> 
select * from T1 
where D in  
(select D 
from T1 
group by D 
having count(*) > 1); 
Marsh Posté le 23-02-2009 à 18:47:03
| olivthill a écrit : Avec quelle base de données ?  | 
 
 
| vttman2 a écrit : Essaie ça aussi   | 
 
 
Tu as lu olivthill?
Marsh Posté le 24-02-2009 à 00:17:26
Ce n'est pas grave. Tout le monde a le droit de proposer des réponses même si elles ne marchent pas (d'ailleurs je me suis moi-même trompé en mettant un test sur B alors que ce champ n'est pas dans la clé). 
Uncle_Scrooge fera l'arbitrage (s'il revient un jour ici).
Marsh Posté le 24-02-2009 à 15:44:19
Ton SQL est à mon avis valable (il ne tombe pas en erreur...) 
 
Je me demande s'il ne voulait pas un truc tout simple comme: 
select D, count(*) 
from T1 
group by D having count(*) > 1;
Marsh Posté le 25-02-2009 à 14:50:50
le count(*) n'a pas besoin d'être dans le select pour être utilisé dans le having... ou alors changez de SGBD parce que franchement...
par contre, pas de select * sans un group by sur toutes les colonnes de la table (sauf sous mysql qui a un comportement assez imprévisible dans ce cas, mais qui ne rejette pas la requête)
Marsh Posté le 28-02-2009 à 18:09:59
| smilaou a écrit : Ton SQL est à mon avis valable (il ne tombe pas en erreur...)  | 
 
 
Il faut que je récupère toutes les données de T1 et ça passe avec la proposition d'olivthill  
 
 
Marsh Posté le 21-03-2009 à 10:53:02
| Uncle_Scrooge a écrit :   | 
 
 
pour une optimisation des performances : 
 
select T1.*  
from T1 inner join  
   (  
   select A, C 
   from T1 
   group by D having count(*) > 1; 
   ) as T2 on ( T1.A = T2.A and T1.C = T2.C ) 
 
Marsh Posté le 22-02-2009 à 11:04:45
Bonjour,
Je me prend la tête sur une stupide requête SQL.
Nous avons une table ayant cette structure
A B C D
a a 3 1111
b b 3 1111
c b 4 1111
z x 3 2222
avec A et C comme clè.
Nous voulons selectionner les lignes ou pour un D donné, nous avons plusieurs clé différentes.
(par exemple, les lignes pour D = 1111)
je pense à :
select *
from T1
group by D
having count(*) > 1;
mais passe pas ...
erreur sur le group by
Message édité par Uncle_Scrooge le 22-02-2009 à 11:05:23