Requete avec un group by ?

Requete avec un group by ? - SQL/NoSQL - Programmation

Marsh Posté le 05-06-2013 à 19:33:53    

Salut
 
j'ai une table
ligne idsuivi idprod type  
1          23     1     1  
2          23     3     1  
3          23     4     2  
4          23     5     2  
5          22     1     1  
6          22     3     1  
7          22     4     2  
8          21     5     2
 
Et je cherche à sortir tous les idsuivi qui peuvent correspondrent à 2 conditions :  
condition 1 :(idprod=1 et type=1)  
condition 2 :(idprod=3 et type=1)  
dans cet exemple je souhaiterai donc avoir l'idsuivi 23 et 22 qui remplissent tous les 2 ces 2 conditions mais je vois pas trop comment faire.
Je pensai faire un group by idsuivi mais comme la lecture est linéaire cela ne fonctionne qu'avec la conditions OU alors que j'ai besoin de ET condition1 ET condition2
Auriez vous une piste à me souffler?
D'avance merci.


Message édité par lapetole le 05-06-2013 à 19:35:58
Reply

Marsh Posté le 05-06-2013 à 19:33:53   

Reply

Marsh Posté le 06-06-2013 à 08:29:59    

Et avec une requête simple comme celle-ci :
 
SELECT DISTINCT IDSUIVI
FROM TABLE_SUIVI
WHERE TYPE = 1
AND IDPROD IN (1,3)
 
?...


---------------
Miagic
Reply

Marsh Posté le 06-06-2013 à 09:07:21    

Si le couple idprod, type est unique par idsuivi tu peux faire:

Code :
  1. Select idsuivi
  2. From table
  3. Where (Type = 1 and idprod = 1)
  4. Or (Type = 1 and idprod = 3)
  5. Group by idsuivi
  6. Having Count(*) = 2


 
Sinon tu peux faire ca (moins performant):

Code :
  1. Select a.idsuivi
  2. From table a
  3.   Join table b on b.idsuivi = a.idsuivi and b.type 1 and b.idprod = 3
  4. Where a.type = 1
  5.   And a.idprod=3


Si tu as des duplicate avec la deuxieme solution tu peux ajouter un distinct.

Reply

Marsh Posté le 27-09-2013 à 12:11:56    

select idsuivi from table where  
(idprod=1 and type=1) or  
(idprod=3 and type=1)  
ou "en groupant" comme Miagic :)
si tu ne veux pas de doublons , tu mets un distinct...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed