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 Firebird Discussion :

Select et variables de selection (where) ou non


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut Select et variables de selection (where) ou non
    Bonjour a tous,

    une petite question, donc j'ai ss doute la reponse; mais je prefere avoir une confirmation aupres de gens bien + competant que moi

    Dans des requetes SELECT d'une procedure stockee, il arrive parfois qu'une des conditions soit NULL et d'autres fois pas :
    la requete est du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       Ch_2 = :Input_2
    INTO
       :OUt_1,
       :Out_2
    do ....
    Lorsque input_1 et input_2, je recoie le resultat attendu, mais lorsque input_2 est NULL, la requete ne renvoie pas la donnee (qui existe). Pour les NULL, en SQL il ne faudrait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       Ch_2 IS NULL
    INTO
       :OUt_1,
       :Out_2
    do ....
    Ma question est donc y a t-il un moyen sous PS de faire un seul type de requete ou il faut passer par 2 requetes en utilisant les IF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    IF (input_2 IS NULL) Then
    begin
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       Ch_2 IS NULL
    INTO
       :OUt_1,
       :Out_2
    do ....
    end else
    begin
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       Ch_2 = :Input_2
    INTO
       :OUt_1,
       :Out_2
    do ....
    end
    Avec bcp de contraintes de ce genre ca peut arriver a un code bien long...

    Evidemment je peux en faire une requete dynamique avec EXECUTE STATEMENT.

    Question subsidiaire :
    En terme d'efficacite et de rapidite de la requete, vaut il mieux faire la serie de requete "en clair" ou par la requete dynamique (EXECUTE STATEMENT) ?

    merci d'avance

    olivier

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    va voir du coté de l'opérateur IS [NOT] DISTINCT
    (note de version Firebird 2.0.1 page 28 et http://www.firebirdsql.org/manual/nu...-langelem.html et aussi
    http://www.firebirdsql.org/manual/nu...e-testing.html

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       ( :Input_2 IS NULL Ch_2 IS NULL OR Ch_2 = :Input_2 )
    INTO
       :OUt_1,
       :Out_2
    do ....
    fera se que tu désire je pense

  4. #4
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    reponse tardive

    j'etais en vacances puis en mission sur le terrain !

    ca me semble bien plus esthetique que ma solution, j'adopte

    merci bcp

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT A, B
    FROM
       MaTable
    WHERE
       Ch_1 = :Input_1 AND
       Ch_2 IS NOT DISTINCT FROM :Input_2 
    INTO
       :OUt_1,
       :Out_2
    do ....

  6. #6
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    la derniere reponse marche PARFAITEMENT

    merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/02/2015, 11h44
  2. [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, 18h00
  3. Réponses: 4
    Dernier message: 30/05/2006, 17h21
  4. nombre variable de select
    Par gilles74 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/05/2006, 16h05
  5. resultat requete SQL d'un select dans variable vb
    Par seb_06 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 11/10/2004, 16h29

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