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 :

Rechercher la valeur NULL avec la jointure . [MariaDB]


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut Rechercher la valeur NULL avec la jointure .
    Bonsoir, voici 3 tables:

    Nom : client_logement.png
Affichages : 121
Taille : 13,6 Ko

    A gauche la table logement, au millieur la table transaction et a droite la table client.

    Voici ma requête pour obtenir acheteur et vendeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MariaDB [immo]> Select `proprietaire`,`acheteur` FROM transaction  LEFT JOIN logement  ON logement.id = transaction.id_logement  LEFT JOIN client ON transaction.id_acheteur = client.id;
    +--------------+----------+
    | proprietaire | acheteur |
    +--------------+----------+
    | toto         | taty     |
    | nono         | taty     |
    +--------------+----------+
    Comment je dois faire pour obtenir tous le propriétaires ? c'est à dire que personne à acheter le bien de titi ?

    voici la table logement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MariaDB [immo]> select * from logement;
    +----+--------------+------------+------------+
    | id | proprietaire | prix_vente | codepostal |
    +----+--------------+------------+------------+
    |  1 | toto         |     110000 | 69570      |
    |  2 | titi         |     100000 | 69130      |
    |  3 | nono         |      78000 | 69710      |
    +----+--------------+------------+------------+
    3 rows in set (0.00 sec)
    merci de la réponse

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 108
    Points : 28 416
    Points
    28 416
    Par défaut
    Il suffit de mettre les tables dans le bon ordre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 	proprietaire
    	, 	acheteur
    FROM 	logement
    	LEFT JOIN
    		transaction
    		ON 	logement.id = transaction.id_logement
    	LEFT JOIN
    		client
    		ON transaction.id_acheteur = client.id
    ;

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    Merci beaucoup , il m'avais sembler d'inversé entre transaction et logement mais j'ai du faire d'autre erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MariaDB [immo]>  SELECT proprietaire,acheteur FROM logement LEFT JOIN transaction ON logement.id = transaction.id_logement LEFT JOIN client ON transaction.id_acheteur = client.id;
    +--------------+----------+
    | proprietaire | acheteur |
    +--------------+----------+
    | toto         | taty     |
    | nono         | taty     |
    | titi         | NULL     |
    +--------------+----------+
    3 rows in set (0.00 sec)

  4. #4
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 466
    Points : 19 456
    Points
    19 456
    Par défaut
    Salut à tous.

    Votre problème est une question de jointure entre vos différentes tables.
    Cela se résume à deux cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a) logement    (1:id)          --> (1:id_logement) transaction
    b) transaction (2:id_acheteur) --> (2:id)          client

    En généralisant, vous avez la possibilité de faire trois select différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1) logement    (1:id)                          --> (1:id_logement) transaction (2:id_acheteur) --> (2:id) client
    2) client      (1:id)                          --> (1:id_acheteur) transaction (2:id_logement) --> (2:id) logement
    3) transaction (1:id_acheteur) (2:id_logement) --> (1:id)          client
       ------------------------------------------- --> (2:id) logement
    Pour chaque cas ci-dessus, vous n'obtiendrez pas nécessairement le même résultat.
    Car c'est la première table qui va conditionner la présence ou l'absence des liens avec les autres tables.
    Donc oui, l'ordre d'appel de vos tables dans un select a de l'importance sur l'obtention du résultat final.

    Afin de toujours extraire les lignes de la première table, vous devez impérativement utiliser une jointure "left outer join".
    Sans cela, si vous n'avez pas de jointure dans une autre table, la ligne n'apparaitra pas.

    @+

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

Discussions similaires

  1. Rechercher une valeur absolue avec fonction Find
    Par Jeanvaljean44 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/09/2008, 08h25
  2. [SQL-Server] SQRetourner une valeur NULL avec un mssql_fetch_array
    Par arnolem dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/08/2007, 16h22
  3. Pas d'affichage des valeurs nulles avec un COUNT
    Par phoenixz22 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 30/05/2007, 18h39
  4. Valeur null dans une jointure
    Par Christophe P. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/12/2006, 09h48
  5. recherche multicritere valeur null
    Par petit lu dans le forum Access
    Réponses: 4
    Dernier message: 23/07/2006, 21h57

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