IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

If dans le where d'un SELECT


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Points : 97
    Points
    97
    Par défaut If dans le where d'un SELECT
    Bonjour,

    Voici ce que j'aimerai faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select toto, titi, tutu as essai ,etc....from tableo, tablei, table3
    where ....
    and (IF(tata like 'HS') select tutu as essai from table3 where tableo.jj = table3.jj))

    Est-ce que quelqu'un a une idée ???

    merci .
    NFHnv

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    La syntaxe équivalente en SQL est CASE WHEN <condition> THEN <resultat> [WHEN <condition2> THEN <resultat2>] [ELSE <resultatelse>] END.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Points : 97
    Points
    97
    Par défaut
    Merci pour l'instruction CASE WHEN .

    Par contre j'ai un problème de syntaxe.
    Voici ce que j'écris dans ma clause where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    and (CASE WHEN (ct.c_type_contrat_trav  like 'HS') 
    then (select ujm.categorie_ref_uni as categorie_refuni from ujm_sous_type_ctr_trav ujm 
          where ujm.c_type_contrat_travail = ct.c_type_contrat_travail
          and   ujm.c_sous_type_ctr = ct.c_sous_type_contrat_travail(+)) END)
    order by 1
    et voici ce que SQL me répond:
    ORA-00920: opérateur relationnel non valide
    00920. 00000 - "invalid relational operator"
    *Cause:
    *Action:
    Erreur à la ligne 24, colonne 73
    Quelqu'un a-t-il une idée ??
    Merci par avance
    NFHnv

  4. #4
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Le CASE retourne une valeur , votre syntaxe équivaut à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 1 FROM DUAL WHERE 1
    Ce qui est incorrect... Comme le message d'erreur l'indique il faut ajouter un opérateur relationnel, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AND (CASE WHEN (ct.c_type_contrat_trav  LIKE 'HS') 
    then (SELECT ujm.categorie_ref_uni AS categorie_refuni FROM ujm_sous_type_ctr_trav ujm 
          WHERE ujm.c_type_contrat_travail = ct.c_type_contrat_travail
          AND   ujm.c_sous_type_ctr = ct.c_sous_type_contrat_travail(+)) END) = 1
    ORDER BY 1

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 118
    Points : 28 507
    Points
    28 507
    Par défaut
    Quelle version d'Oracle utilises-tu ?
    Sais-tu que la syntaxe (+) peut avantageusement être remplacée par un OUTER JOIN pour les jointures externes, et cela depuis la version 8i ?

    L'opérateur CASE...WHEN...THEN...ELSE...END retourne une valeur résultant d'une expression et ne peut retourner un ensemble de données comme tu l'as écrit.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Points : 97
    Points
    97
    Par défaut
    Alors comment lui dire de récuperer la données que je mets dans le deuxième select si je suis dans le cas 'HS' ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Points : 97
    Points
    97
    Par défaut
    Merci pour l'info sur le outer join ....je ne savais pas mais je débute en oracle et en plus ici toutes les requêtes sont faites avec le (+) ....je ne voudrais pas trop innover !! Mais j'essayerai de l'utiliser ....
    NFHnv

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Citation Envoyé par NFHnv Voir le message
    Alors comment lui dire de récupérer la données que je mets dans le deuxième select si je suis dans le cas 'HS' ?
    Présentez-nous vos tables, quelques données, votre requête et ce que vous attendez comme résultat.

  9. #9
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    N'oubliez pas aussi lafonction decode pour des conditions d'egalité.

    la syntaxe est comme suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    decode(champ,valeur1,resulat1
                        ,valeur2,resulat2
                        ,valeur3,resulat3
                        ....
                        ,valeurN,resulatN
                        ,valeur_de_else)

    iterpretation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    si champ=valeur1 alors resultat1
    else si champ=valeur2 alors resultat2
           else si champ=valeur3 alors resultat3
                 ....
                  else valeur_de_else

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 118
    Points : 28 507
    Points
    28 507
    Par défaut
    La version ANSI de DECODE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE champ  WHEN valeur1 THEN resultat1
                WHEN valeur2 THEN resultat2
                ...
                WHEN valeurN THEN resultatN
                ELSE valeur_de_else END

Discussions similaires

  1. [MySQL] Variable dans le Where d'un select
    Par claude77 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/03/2011, 19h00
  2. [AC-2003] Mettre un SELECT dans le WHERE
    Par tonyhv dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/05/2010, 17h19
  3. Select avec "date d'un premier élément" dans clause Where
    Par adrien357 dans le forum Requêtes
    Réponses: 9
    Dernier message: 05/11/2008, 16h27
  4. Select dans clause Where
    Par Bisûnûrs dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 12h50
  5. Colonnes dans le WHERE donc dans le SELECT ?
    Par nicoreims dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/08/2006, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo