Ответ 1
Размещение предложений ON
контролирует порядок оценки логический.
Итак, сначала происходит t1 LEFT JOIN t2 ON t1.fk = t2.pk
. Результатом этого объединения является виртуальная таблица, содержащая все соответствующие строки из t1, t2
и (поскольку это левое внешнее объединение), любые несогласованные строки t1
также сохраняются с нулевыми значениями для столбцов t2
.
Эта виртуальная таблица затем участвует в следующем соединении. JOIN t3 ON t2.fk = t3.pk
Любые записи t2
, которые не соответствуют строкам в t1
, не являются частью виртуальной таблицы, выводимой с первого этапа, поэтому не будут отображаться в конечном результате. Кроме того, это внутреннее соединение на t2.fk = t3.pk
потеряет любые значения NULL
t2.fk
, превратив все ваше дело во внутренние соединения.
Логическая обработка запросов объясняется здесь здесь Itzik Ben Gan