Как использовать несколько левых соединений в SQL? - PullRequest
47 голосов
/ 09 февраля 2011

Можно ли использовать несколько левых соединений в SQL-запросе?

    LEFT JOIN
        ab 
    ON
        ab.sht = cd.sht

я хочу добавить, чтобы прикрепить к нему еще один запрос? это будет работать?

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

Будет ли это работать?

Ответы [ 4 ]

47 голосов
/ 09 февраля 2011

Да, это возможно.Вам нужно одно ON для каждой таблицы соединения.

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

Кстати, мои личные предпочтения форматирования для сложного SQL описаны в http://bentilly.blogspot.com/2011/02/sql-formatting-style.html. Если вы собираетесь писать много из этого, вероятно,поможет.

27 голосов
/ 09 февраля 2011

Да, но синтаксис отличается от того, что у вас есть

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>
10 голосов
/ 09 февраля 2011

Требуемый SQL будет примерно таким: -

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

Надеюсь, это поможет.

0 голосов
/ 09 февраля 2011

У вас есть два варианта, в зависимости от вашего заказа стола

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
...