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 :

Selection si pas de résultat valeur par défaut


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 117
    Points : 219
    Points
    219
    Par défaut Selection si pas de résultat valeur par défaut
    Bonjour a tous,
    J'ai une table contenant les données suivantes
    id Valeur
    1 test1
    2 test2
    3 test3
    * default

    A l'heure actuel, je fais une requête pour trouver la valeur correspondant a un id, si aucun résultat n'est remonté je fais une autre requetes avec l'id * pour trouver ma valeur par défaut.
    Y'a t'il une solution pour effectuer cette recherche en une seul requêtes?

    Merci d'avance.

    Mon petit blog sans prétention : http://blog.octera.info/

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  tb0.valeur
    FROM    matable tb0
    WHERE   tb0.id = :cherche
    UNION
    SELECT  tb1.valeur
    FROM    matable tb1
    WHERE   tb1.id = '*'
        AND NOT EXISTS
            (   SELECT  NULL
                FROM    matable tb2
                WHERE   tb2.id = :cherche
            )
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  CASE WHEN tb1.id IS NOT NULL THEN tb1.valeur ELSE tb0.valeur END
    FROM    matable tb0
      left outer join matable tb1 on tb1.id = :cherche
    WHERE   tb0.id = '*'

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 786
    Points
    30 786
    Par défaut
    On peut encore améliorer la première ligne de la (très bonne ) solution de pacmann
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  COALESCE(tb1.id, tb0.valeur)
    FROM   ...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    With Data As (
      Select '1' as id,  'test1' as lib from dual union all
      Select '2', 'test2' as lib from dual union all
      Select '3', 'test3' as lib from dual union all
      Select '*', 'default' as lib from dual
    )
    Select Max(id), 
           Max(lib) Keep (Dense_Rank Last Order by id) As lib
      From data
     Where id In ('&v','*')
    /

  6. #6
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    On peut encore améliorer la première ligne de la (très bonne ) solution de pacmann
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  COALESCE(tb1.id, tb0.valeur)
    FROM   ...
    En fait je l'avais écrit comme ça à l'origine, puis j'ai édité mon message pour ajouter "si valeur est déclaré NOT NULL", puis j'ai réédité pour mettre la version CASE

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 117
    Points : 219
    Points
    219
    Par défaut
    Bonjour a tous,
    Merci pour vos réponse.
    Les réponses de pacmann et al1_24 m'ont permis de résoudre mon problème.

    Mon petit blog sans prétention : http://blog.octera.info/

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par OcterA Voir le message
    Les réponses de pacmann et al1_24 m'ont permis de résoudre mon problème.
    Je préfère la solution de mnitu

  9. #9
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Je préfère aussi la solution de Mnitu, qui est la première qui m'étais venue à l'esprit, mais j'aime pas trop exploiter le fait que '*' se trouve 'alphabétiquement' après '1', '2', ... et avec un CASE WHEN id = '*' THEN 1 ELSE O END, je trouvais ça moins sex...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    J'avoue que je pensais que la requête de mnitu était plus performante mais en faite les 2 requêtes font la même quantité de lecture logique.
    Bien vu paku !
    mais j'aime pas trop exploiter le fait que '*' se trouve 'alphabétiquement' après '1', '2'
    Je comprends, surtout qu'il est avant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PEAR][HTML_QuickForm] Select et valeur par défaut
    Par amazilia dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 02/04/2007, 00h58
  2. Réponses: 3
    Dernier message: 25/05/2006, 18h50
  3. Réponses: 7
    Dernier message: 24/05/2006, 11h52
  4. [PEAR][HTML_QuickForm] Attribution d'une valeur par défaut à un select
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 24/02/2006, 08h08
  5. [MySQL] Valeur par défaut sur un SELECT
    Par hugo69 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/01/2006, 17h21

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