65 votes

Comment utiliser plusieurs LEFT JOINs en SQL ?

Est-il possible d'utiliser plusieurs jointures gauches dans une requête sql ?

    LEFT JOIN
        ab 
    ON
        ab.sht = cd.sht

Je veux ajouter une autre requête comme celle-ci ? Cela fonctionnera-t-il ?

    LEFT JOIN
        ab AND aa
    ON
        ab.sht = cd.sht
           AND
        aa.sht = cc.sht

Est-ce que ça va marcher ?

66voto

btilly Points 14710

Oui, c'est possible. Vous avez besoin d'un ON pour chaque table de jonction.

LEFT JOIN ab
  ON ab.sht = cd.sht
LEFT JOIN aa
  ON aa.sht = cd.sht

Par ailleurs, ma préférence personnelle en matière de formatage pour le SQL complexe est décrite dans le document suivant http://bentilly.blogspot.com/2011/02/sql-formatting-style.html . Si vous avez l'intention d'en écrire beaucoup, cela vous aidera probablement.

41voto

Daniel DiPaolo Points 24085

Oui, mais la syntaxe est différente de ce que vous avez

SELECT
    <fields>
FROM
    <table1>
    LEFT JOIN <table2>
        ON <criteria for join>
        AND <other criteria for join>
    LEFT JOIN <table3> 
        ON <criteria for join>
        AND <other criteria for join>

0 votes

Merci de montrer les critères AND sur les JOINs. Je me cassais la tête en déplaçant incorrectement certains termes de recherche dans la clause WHERE !

0 votes

Cette réponse doit être sélectionnée comme la meilleure.

15voto

Knowledge Craving Points 4681

Le SQL requis sera le suivant

SELECT * FROM cd
LEFT JOIN ab ON ab.sht = cd.sht
LEFT JOIN aa ON aa.sht = cd.sht
....

2 votes

La visualisation des LEFT JOIN dans ce format, l'un après l'autre, met vraiment les choses en perspective.

1voto

RichardTheKiwi Points 58121

Vous avez deux choix, en fonction de votre commande de table

create table aa (sht int)
create table cc (sht int)
create table cd (sht int)
create table ab (sht int)

-- type 1    
select * from cd
inner join cc on cd.sht = cc.sht
LEFT JOIN ab ON ab.sht = cd.sht
LEFT JOIN aa ON aa.sht = cc.sht

-- type 2
select * from cc
inner join cc on cd.sht = cc.sht
LEFT JOIN ab
LEFT JOIN aa
ON aa.sht = ab.sht
ON ab.sht = cd.sht

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X