Как использовать несколько LEFT JOIN в SQL?

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

    LEFT JOIN
        ab 
    ON
        ab.sht = cd.sht

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

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

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


person cute    schedule 09.02.2011    source источник


Ответы (4)


Да, это возможно. Вам нужно одно 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. Если вы собираетесь писать много этого, это, вероятно, поможет.

person btilly    schedule 09.02.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>
person Daniel DiPaolo    schedule 09.02.2011
comment
Спасибо за показ критериев AND для JOIN. Я сломал себе голову, неправильно переместив некоторые условия поиска в предложение WHERE! - person Santosh; 12.03.2015
comment
Этот ответ следует выбрать как лучший. - person mvxxx; 20.10.2019

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

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

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

person Knowledge Craving    schedule 09.02.2011
comment
Просмотр ЛЕВЫХ СОЕДИНЕНИЙ в этом формате, одного за другим, действительно позволяет взглянуть на вещи по-новому. - person Kalle H. Väravas; 16.06.2017

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

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
person RichardTheKiwi    schedule 09.02.2011