Auteur Sujet: Requête Sql ...  (Lu 1292 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Un peu neuneu

  • Débutant
  • *
  • Messages: 100
Requête Sql ...
« le: 30 mars 2004 à 14:53:21 »
Bonjour,

Dans une table j'ai un champ c1 qui peut prendre les valeurs NULL ou une valeur numérique donnée.
J'ai un champ c2 qui peut prendre les valeurs NE, SP ou PU.

Je voudrais remonter EN UNE SEULE REQUETE la liste des c1 dont tous les enregistrement dans la table ont une valeur c2 != PU.

Exemple :
c2 : c1
PU : 1
PU : 1
PU : 2
NE : 1
NE : NULL
NE : 3
NE : 3
SP: 3
NE : 4
SP : 4

Ici seuls les enregistrement ayant pour valeur c1= 3 ou 4 pour c1 ont tous les enregistrements avec valeur de c2 != PU. Je voudrais donc une requête qui me remonte 3 et 4.

Heu .. J'espère avoir été clair ... J'ai un mal fou à voir comment construire cette requête.

Merci par avance.

 
Ce qui est utile au plus grand nombre l'emporte sur les désirs d'un seul !

CaniHome

Hors ligne smilynet

  • Habitué
  • **
  • Messages: 223
    • http://www.smilynet.com
Requête Sql ...
« Réponse #1 le: 30 mars 2004 à 14:58:06 »
SELECT c1, c2 FROM ma_table WHERE c1 IS NOT NULL AND c2<>'PU' ORDER BY c1
ca devrait marcher ca non ?

Hors ligne Un peu neuneu

  • Débutant
  • *
  • Messages: 100
Requête Sql ...
« Réponse #2 le: 30 mars 2004 à 15:41:51 »
Salut smylinet,

Ben non ça marche pas, parce que cette requête va me remonter l'enregsitrement c2 = NE, c1 = 1, or il existe des enregistrements ayant c1=1 avec c2 = PU. Je ne dois donc pas remonter la valeur 1 ou pour c1.

En fait c'est bein là qu'est le pb ... Il faut c2 != PU pour TOUS les enregistrements ayant la valeur c1 = x. Si un seul couple c1=x/c2=PU existe c1 ne doit pas remonter.
Ce qui est utile au plus grand nombre l'emporte sur les désirs d'un seul !

CaniHome

Hors ligne smilynet

  • Habitué
  • **
  • Messages: 223
    • http://www.smilynet.com
Requête Sql ...
« Réponse #3 le: 30 mars 2004 à 16:33:33 »
ah ok! j'avais mal compris

ben j'suis interessé par la réponse...

Hors ligne NaJ

  • Connaisseur
  • ***
  • Messages: 354
    • http://photo.pyrollo.com
Requête Sql ...
« Réponse #4 le: 31 mars 2004 à 11:28:18 »
Le plus simple pour ça est d'utiliser une sous requête :

SELECT c1, c2 FROM ma_table t1 WHERE c1 IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ma_table t2 WHERE t2.c2='PU' AND t2.c1=t1.c1) ORDER BY c1
Malheureusement, il me semble que MySQL ne le permet pas encore.

La doc MySQL, propose des alternatives aux sous-requete, il faut peut-être chercher par là.
 
www.traque-aux-plaques.com

Collection de photos de plaques et regards de chaussée

http://photo.pyrollo.com

Photos de balades

Hors ligne Un peu neuneu

  • Débutant
  • *
  • Messages: 100
Requête Sql ...
« Réponse #5 le: 31 mars 2004 à 22:13:52 »
Merci pour vos réponses.

Finalement devant la complexité de la chose je me suis rabattu sur la solution inverse ...

Je remonte toutes les enr qui ont c2 = PU groupé par c1.
Puis je remonte tous les c1 existants quel que soit la valeur de c2.
Et je fais la comparaison des 2 requêtes pour ne prendre que les c2 qui apparaissent dans la requête 2 mais pas dans la 1 ...

Plus long, mais ça marche ...

 
Ce qui est utile au plus grand nombre l'emporte sur les désirs d'un seul !

CaniHome