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 :

Imbriquer des conditions


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 48
    Points
    48
    Par défaut Imbriquer des conditions
    Bonjour
    J'aimerai savoir s'il est possible de faire une requête de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ma_table WHERE (id_instru!='1' AND type!='instru') AND (id_kit!='6' AND type!='kit')
    J'aimerai donc tout sélectionner sauf ce qui se trouve entre les parenthèses.
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Oui c'est possible et votre requête n'est pas très loin d'être correcte : il faut modifier un de vos AND en OR.
    Je vous laisse trouver lequel !

  3. #3
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 48
    Points
    48
    Par défaut
    Je ne vois pas ce que vous voulez dire. Si je change un AND en OR je n'aurai pas toutes mes conditions de réalisé. Je n'ai peut être pas été assez précis dans la description de mon problème. Voici la requête que je voudrai réalisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ma_table WHERE (membre_id != '1' AND type != 'instru') AND (membre_id != '6' AND type != 'kit')
    J'aimerai tout sélectionner dans ma table sauf les lignes ou membre_id=1 et en même temps type='instru'. Je ne vois donc pas en quoi mettre un OR à la place d'un AND peut résoudre mon problème.
    Voyez vous ce que je veux dire?
    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM ma_table WHERE (membre_id,type) NOT IN (select '1','instru' from dual)
    Ou mieux, utilisez EXCEPT (MINUS sous Oracle, vous n'avez pas précisé votre sgbd) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM ma_table
    EXCEPT 
    SELECT * FROM ma_table 
    WHERE (membre_id <> '1' AND type <> 'instru') 
       OR (membre_id <> '6' AND type <> 'kit')
    En SQL, le symbole "différent de" est <>.
    Si votre champs membre_id est de type numérique, n'encadrez pas le 1 de cotes.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Snipah, Oracle gère très bien la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM ma_table
    WHERE (membre_id,type) NOT IN (('1', 'instru'), ('6', 'kit'))
    Mais le SGBD n'est pas précisé.

    tibo894, j'ai parfaitement compris votre besoin (si je mets à part que votre première et seconde requêtes ne sont pas les mêmes, je pars de la seconde).

    Vous voulez exclure les couples ('1', 'instru') et ('6', 'kit').

    Ecrire le contraire de ce que vous voulez est simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM ma_table
    WHERE (membre_id = '1' and type = 'instru')
       OR (membre_id = '6' and type = 'kit')
    Soit vous fait un gros NOT de tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM ma_table
    WHERE NOT ( (membre_id = '1' and type = 'instru')
             OR (membre_id = '6' and type = 'kit') )
    Soit vous l'écrivez vous-même. Le contraire d'égal est différent, le contraire de AND est OR, le contraire de OR est AND :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM ma_table
    WHERE (membre_id <> '1' OR type <> 'instru')
      AND (membre_id <> '6' OR type <> 'kit')
    J'aurai préféré que vous le trouviez tout seul celà dit : il a fallu que je fasse l'exercice pour trouver la bonne syntaxe, on travaille plus facilement avec les données qu'on veut plutôt qu'avec les données qu'on ne veut pas.
    Mon conseil était donc partiellement erroné.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    En effet, c'est mieux que ce que j'avais proposé

  7. #7
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 74
    Points : 48
    Points
    48
    Par défaut
    Merci à tous

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

Discussions similaires

  1. [EXCEL] Comment imbriquer des conditions
    Par Nicolas67 dans le forum Excel
    Réponses: 2
    Dernier message: 17/05/2006, 11h24
  2. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19
  3. [Compilateur] Optimisation des conditions
    Par Pedro dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 13h49
  4. Imbriquer des logic:iterate
    Par lalou33 dans le forum Struts 1
    Réponses: 4
    Dernier message: 16/06/2004, 10h31
  5. Réponses: 12
    Dernier message: 18/03/2004, 15h09

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