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 :

requête avec résultat vide ou non vide


Sujet :

Langage SQL

  1. #1
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut requête avec résultat vide ou non vide
    Bonjour,

    Je dois faire une requête simple récupérant plusieurs lignes d'une table avec des données associées provenant d'une autre table (une jointure donc), et parfois, les données associées n'existent pas mais je souhaiterai quand même récupérer un résultat vide.

    Par exemple :

    table1 --> champ donnee1
    table1 --> champ donnee2

    table2 --> champ donnee1 (clé étrangère)
    table2 --> champ donnee3
    table2 --> champ donnee4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Select A.donnee1, A.donnee2, B.donnee3, B.donnee4 
    FROM table1 A, table2 B 
    WHERE A.donnee1=B.donnee1 
    AND (A.donnee1 = "1234" OR A.donnee1 = "4567" OR A.donnee1 = "78910" etc...)
    Cette requête va me renvoyer toutes les lignes pour lesquelles les données A.donnee1 ("1234", "4567" etc..) existent en B.donnee1. Mais dans le cas où ces données n'existent pas je souhaiterai que les données associées retournent un champ vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A.donnee1;A.donnee2;B.donnee3;B.donnee4
    monsieur;bidule;lunettes;chaussures
    madame;trucmuche;[vide];[vide]
    madame;girouette;[vide];sandales
    Comment faire ?

    Merci

  2. #2
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Bonjour,

    ce que tu veux s'appelle une jointure externe à gauche.
    La syntaxe est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT A.donnee1, A.donnee2, B.donnee3, B.donnee4
    FROM table1 A LEFT OUTER JOIN table2 B ON A.donnee1=B.donnee1
    WHERE (A.donnee1 = "1234" OR A.donnee1 = "4567" OR A.donnee1 = "78910" etc...)

  3. #3
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Pour la même pratique, peut-on effectuer plusieurs select d'un seul coup dans phpmyadmin ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select machin from truc where machin = 8;
    select coucou from truc where coucou = 7;
    etc...
    Sachant que je ne peux pas réaliser l'opération avec une seule requête :
    select machin, coucou from truc where machin = 8 AND coucou = 7;

    Merci

  4. #4
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Merci bouvda, je mets en pratique

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 215
    Points : 471
    Points
    471
    Par défaut
    Salut,
    Tu peux faire un UNION si machin et coucou sont de même type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT machin FROM truc WHERE machin = 8
    UNION
    SELECT coucou FROM truc WHERE coucou = 7;
    Sinon il faudrait voir du côté des transactions.

  6. #6
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Le LEFT OUTER JOIN ne fonctionne pas, il me renvoit moins de lignes que prévu. Il devrait en principe me renvoyer autant de lignes qu'il y a de "OR" non ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 215
    Points : 471
    Points
    471
    Par défaut
    Citation Envoyé par speedev
    Le LEFT OUTER JOIN ne fonctionne pas, il me renvoit moins de lignes que prévu. Il devrait en principe me renvoyer autant de lignes qu'il y a de "OR" non ?
    Autant de lignes que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT A.donnee1, A.donnee2
    FROM table1 A
    WHERE (A.donnee1 = "1234" OR A.donnee1 = "4567" OR A.donnee1 = "78910" etc...)

  8. #8
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Oui, or ce n'est pas le cas dans mon résultat car je récupère moins de ligne.
    Je vais chercher encore !

  9. #9
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    Il ne retourne pas forcément autant de lignes qu'il y a de OR mais les lignes qui répondent aux conditions imposées par la clause WHERE.

  10. #10
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Je sais bien...
    Je cherche pourquoi ça ne renvoie pas le bon nombre de résultats.

  11. #11
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par speedev
    Je cherche pourquoi ça ne renvoie pas le bon nombre de résultats.
    Si vous voulez que l'on vous aide alors :
    - donnez-nous la structure de vos tables
    - un jeu d'essai
    - éventuellement le résultat que vous souhaitez obtenir
    - la requête que vous exécutez

  12. #12
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    peux tu donner un exemple de ligne non retourné alors qu'il devrait?

  13. #13
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Non c'est bon je viens de trouver la bonne requête, il me fallait rajouter une condition après le "ON" du LEFT OUTER JOIN, ça ne fonctionnait pas car j'avais mis la condition dans le WHERE général.

    Sinon, il n'est évidement pas question de fournir quoique ce soit de structure en ligne car je travaille pour un groupe qui n'accèpterait pas ça. C'est pourquoi je fournis des exemples. J'ai été suffisament explicite puisque l'on m'a proposé la bonne solution à savoir le Left Outer Join.

    Merci à vous c'est parfait.

  14. #14
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par speedev
    Sinon, il n'est évidement pas question de fournir quoique ce soit de structure en ligne car je travaille pour un groupe qui n'accèpterait pas ça. C'est pourquoi je fournis des exemples. J'ai été suffisament explicite puisque l'on m'a proposé la bonne solution à savoir le Left Outer Join.
    On ne vous oblige pas à indiquer les noms des tables, des colonnes, etc. tels qu'ils sont réellement dans votre base ou encore de fournir des lignes de données confidentielles.
    D'ailleurs, on préfère la simplification et personne ne vous en voudra ou ne comprendra pas si vous nommez vos table T1, T2, etc.

    Maintenant si vous vous sentez agressé, c'est à vous de comprendre que notre demande est dans votre intérêt

  15. #15
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Agressé ?!
    Mais non pas du tout !

    Je n'ai pas trop apprécié le "Si vous voulez qu'on vous aide".

    Je suis un Breton grognon, de mauvais poil aujourd'hui, perfectionniste et qui veut tout et tout de suite

    Vous m'excuserez...

    Bonne journée

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

Discussions similaires

  1. Requête avec résultat vide
    Par le_ben dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/06/2013, 09h03
  2. Des "null" avec une source xml non vide
    Par anayathefirst dans le forum Jasper
    Réponses: 4
    Dernier message: 24/08/2011, 23h56
  3. [Vxi3] Tableau de résultat de requête avec résultat autre requête
    Par SebastienM dans le forum Webi
    Réponses: 6
    Dernier message: 14/12/2009, 11h26
  4. recherche de champ vide ou non vide dans une table
    Par milan dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/07/2008, 10h42
  5. Requête avec résultat trié
    Par guenfood dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/09/2006, 14h53

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