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

Requêtes MySQL Discussion :

probleme OUTER JOIN


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut probleme OUTER JOIN
    Bonjour,

    Voila j'ai 2 tables, lots L et clients_entreprises C, liées par L.id=C.id_lot.
    J'aimerais pouvoir récupérer les valeurs des 2 tables liées mais aussi celles de la table lot pour lesquelles aucune ligne de la table clients_entreprises ne correspond.

    J'utilise la requête suivante

    SELECT L.id AS id_lot, C.id AS id_clients_entreprises, L.nom
    FROM lots L
    LEFT OUTER JOIN clients_entreprises C ON L.id=C.id_lot
    WHERE C.id_client=".$client['id']." OR C.id_client IS NULL
    Le problème est que cela ne me renvoie les valeurs de la table lots que si la table clients_entreprises est vide, ou si $client['id'] est déja enregistré dans la table clients_entreprises. Alors que j'aimerais récupérer les valeurs de la table lot de toute façon.

    Si quelqu'un à une solution, merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE C.id_client=".$client['id']." OR C.id_lot IS NULL

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    J'ai essayé, ça ne marche pas non plus.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    peux-tu publier tes CREATE TABLE et un échantillon de données ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    CREATE TABLE `lots` (
    `id` int(11) NOT NULL auto_increment,
    `position` int(11) NOT NULL,
    `nom` varchar(40) NOT NULL,
    PRIMARY KEY (`id`)
    )

    CREATE TABLE `clients_entreprises` (
    `id` int(11) NOT NULL auto_increment,
    `id_client` int(11) NOT NULL,
    `id_lot` int(11) NOT NULL,
    `id_entreprise` int(11) NOT NULL,
    `previsionnel` float NOT NULL,
    `text` varchar(255) NOT NULL,
    `reel` varchar(255) NOT NULL,
    `motif` varchar(255) NOT NULL,
    `diff_entreprise` varchar(60) NOT NULL,
    PRIMARY KEY (`id`)
    )

    tables lots
    id position nom
    12 6 Portes Intérieures
    13 7 Plomberie Sanitaire
    14 8 Plomberie Chauffage
    16 10 Chape
    ...

    table clients_entreprises
    id id_client id_lot id_entreprise previsionnel text reel motif diff_entreprise
    1 2 33 6 120
    2 2 36 0 0
    3 2 37 0 0
    4 2 38 0 0
    ...
    (c'est pas bien présenté mais j'arrive pas à faire mieux)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    Personne n'a d'idée???
    Peut être que la structure de mes tables ne convient pas.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Avec tes données et ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT L.id AS id_lot, C.id AS id_clients_entreprises, L.nom
    FROM lots L
    LEFT OUTER JOIN clients_entreprises C ON L.id=C.id_lot
    WHERE C.id_client=2 OR C.id_lot IS NULL
    J'obtiens le résultat suivant, quii me semble correspondre à ta demande :
    id_lot id_clients_entreprises nom
    12 null Portes Intérieures
    13 null Plomberie Sanitaire
    14 null Plomberie Chauffage
    16 null Chape

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    Enfait là ça renvoie uniquement les lignes de la table lots auxquelles correspond soit une ligne de clients_entreprises avec id_client=2, soit aucune ligne de clients_entreprises.

    Moi ce que j'aimerais c'est recuperer toutes les lignes de la table lots L, et pour chaqune d'elles la ligne de la tables clients_entreprises C correspondante, avec comme critere de sélection C.id_client='id du client', si elle existe.

    tables lots
    id position nom
    12 6 Portes Intérieures
    13 7 Plomberie Sanitaire
    14 8 Plomberie Chauffage
    16 10 Chape
    17 12 Isolation Combles
    18 13 Crépis Extérieur
    ...

    table clients_entreprises
    id id_client id_lot id_entreprise previsionnel text reel motif diff_entreprise
    1 2 13
    2 2 16
    3 8 18
    4 3 17
    ...


    Ce que j'aimerais obtenir pour id_client=3 par exemple:

    id_lot id_clients_entreprises nom
    12 null Portes Intérieures
    13 null Plomberie Sanitaire
    14 null Plomberie Chauffage
    16 null Chape
    17 4 Isolation Combles
    18 null Crépis Extérieur
    or la requete suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT L.id AS id_lot, C.id AS id_clients_entreprises, L.nom
    FROM lots L
    LEFT OUTER JOIN clients_entreprises C ON L.id=C.id_lot
    WHERE C.id_client=2 OR C.id_lot IS NULL
    renvoie
    id_lot id_clients_entreprises nom
    12 null Portes Intérieures
    14 null Plomberie Chauffage
    17 4 Isolation Combles
    Il manque les lignes de la table lots pour lesquelles un autre id_client est enregistré dans clients_entreprises.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 15
    Par défaut
    Je crois que j'ai trouvé la solution tout seul, il fallait mettre la condition sur id_client dans la clause JOIN et non pas dans la clause WHERE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT L.id AS id_lot, C.id AS id_clients_entreprises, L.nom 
    FROM lots L 
    LEFT OUTER JOIN clients_entreprises C 
    ON L.id=C.id_lot AND C.id_client=".$client['id']." 
    ORDER BY L.position ASC
    Voila merci quand même pour tes conseils.

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

Discussions similaires

  1. [Report Studio] Probleme de 'full outer join'
    Par h_ismaili dans le forum Cognos
    Réponses: 2
    Dernier message: 11/04/2008, 12h42
  2. Probleme d'outer join sur absence d'enregistrement
    Par rieppe dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/10/2006, 10h53
  3. [Oracle 9] Probleme. FULL OUTER JOIN
    Par West01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/10/2006, 07h46
  4. Probleme de NULL avec LEFT OUTER JOIN
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 14h42
  5. probleme avec OUTER / OUTER JOIN
    Par Volcomix dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 21/04/2004, 16h57

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