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

Langage SQL Discussion :

[SQL] condition optionnelle


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut [SQL] condition optionnelle
    Bonjour,

    dans une vue parametrée, j'aimerais mettre une condition optionnel(dans le WHERE). des fois je devrai prendre tous les enregistrement, et des fois pas. Comment puis-je faire?

    est-ce clair ? si non, pardon..

    Merci d'avance

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Merci de relire les règles du forum et par conséquent d'indiquer notamment votre SGBD et sa version.
    Ensuite, soyez plus précis, donnez le code (simplifié ?) de votre vu ainsi qu'un jeu d'essais nous permettant de comprendre sans ambiguïté ce que vous souhaitez faire.

    Enfin, si votre condition est relativement simple, avez-vous essayé d'utiliser la structure CASE WHEN (ou DECODE si vous êtes sur Oracle) ?

  3. #3
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Excusez moi.

    Je suis sous oracle 9i. Voici un exemple(très simplifier) de ce que je voudrais faire avec la solution la plus correct que j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select MaTable.ID 
    from MaTable 
    where Matable.id2 = nvl((select Param.par1 from Param),MaTable.id2)
    dans ce code, ca me prend tous les enregistrement si je ne spécifie rien dans le champ par1 de ma table Param et sinon que l'enregistrement qui a l'id2 qui est égal au champ par1.

  4. #4
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Je suppose que param n'a qu'une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MaTable.ID FROM MaTable,Param WHERE Param.par1 is not null

  5. #5
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    oui, il n'a qu'une ligne.. par la suite lorsqu'il y aura plusieur utilisateur, je vais l'identifier grace a l'id de la session (userenv('sessionid'))..

    Mon code fonctione, il fait ce que je veux, mais je pense pas que question performance ca soit le meilleur.. ma requete gère 60'000 enregistrement..

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    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 143
    Par défaut
    Mon code fonctione, il fait ce que je veux, mais je pense pas que question performance ca soit le meilleur.. ma requete gère 60'000 enregistrement..
    Une paille... pour un serveur optimisé !

    S'il devait y avoir plusieurs paramètres, la requête pourrait être écrite comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT    MaTable.* 
    FROM     MaTable 
    WHERE     EXISTS
            (    SELECT     1
                FROM    Param
                WHERE    Param.SessionId = USERENV('sessionid')
                    AND    Matable.val1 = NVL(Param.par1, MaTable.val1)
                    AND    Matable.val2 = NVL(Param.par2, MaTable.val2)
            )
    ;
    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.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Citation Envoyé par ehmppowa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select MaTable.ID 
    from MaTable 
    where Matable.id2 = nvl((select Param.par1 from Param),MaTable.id2)
    dans ce code, ca me prend tous les enregistrement si je ne spécifie rien dans le champ par1 de ma table Param et sinon que l'enregistrement qui a l'id2 qui est égal au champ par1.
    Ok mais où être vous bloqué si vous avez déjà réussi à écrire votre requête, qu'elle est syntaxiquement correcte et qu'elle vous donne le résultat attendu ?

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

Discussions similaires

  1. Requete SQL > condition BO
    Par Julien59 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 11/06/2008, 16h36
  2. [SQL] Condition si aucun enregistrement correspond à la requête
    Par syl2042 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/09/2007, 10h13
  3. [SQL] Conditions dans une requête SQL
    Par NeO666Linux dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/07/2007, 22h35
  4. [Requête/SQL]Conditions dans un champs calculé
    Par taisherg dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/04/2007, 15h55
  5. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25

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