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 :

Concernant les conditions en SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut Concernant les conditions en SQL
    Bonjour,


    Je suis en train de rédiger une requête SQL pour récupérer certains dossiers ; la condition que je dois mettre sur le where doit me permettre de tester si un code dossier existe pour un client, sinon récupérer les dossiers qui ont le code = 0.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
      from dossier d, client c
     where c.id = d.id
    Au cas ou y aura pas de correspondance en cherche les dossiers qui ont le d.id = 0.
    Qu'est-ce que je dois mettre sur le where pour ce cas ?

    Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Faites plutôt un test d'existence comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select *
      from dossier d
     where d.id = 0
        or exists (select null
                     from client c
                    where c.id = d.id)

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut
    Merci pour ta réponse.

    Mais si je met le Or je rique d'avoir les dossiers = 0 et qui ont une correspondance avec le client

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Non ce n'est pas possible, puisqu'il s'agit du même id (entre celui par défaut et celui qui fait la jointure).

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut
    Voila ce que je sais : le Or permet de récupérer un ou les deux propositions sur le where.

    Alors Est ce que tu peux m'expliquer en détail ?

    Merci.

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Citation Envoyé par kinshinori Voir le message
    Merci pour ta réponse.

    Mais si je met le Or je rique d'avoir les dossiers = 0 et qui ont une correspondance avec le client
    Bonjour,
    Si tu ne veux pas les dossiers dont l'Id est à 0 et qui ont une correspondance avec le client, tu peux ajouter la condition dans la requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
      FROM dossier d
     WHERE d.id = 0
        OR EXISTS (SELECT NULL
                     FROM client c
                    WHERE c.id = d.id and c.id <> 0)

    Si je ne m'abuse, on peut aussi remplacer le exist par une jointure:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select d.*
    from dossier d
    left outer join client c on c.id = d.id
    where (d.id = 0 and c.id is null) or (c.id is not null and d.id <> 0)

    Tatayo.

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut
    Si y a une correspondance entre les deux table par la peine de récupérer les dossiers qui ont le code = 0
    Mais au cas ou y a pas de correspondance la je doit récupérer les dossiers qui ont le code = 0
    Si le but de ma requte

    Merci pour tous ces informations.

  8. #8
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 20
    Par défaut
    Bonjour,

    Est ce que quelqu'un peut m'aider sur la syntaxe de la case when pour l'utiliser comme solution de ma question.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2010, 22h07
  2. Réponses: 2
    Dernier message: 22/11/2009, 23h17
  3. Probleme basique concernant les requetes SQL sous BCB
    Par PhEnOmX dans le forum C++Builder
    Réponses: 8
    Dernier message: 29/02/2008, 16h06
  4. requete SQL sous Access concernant les tranches
    Par Hamadokh dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/01/2007, 15h23

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