Я не мог больше терпеть ... объяснение комментария LOJ / "условий".
У вас есть условие "ON", которое является частью LOJ.
У вас также есть условия "WHERE", которые являются частью всего запроса.
Существует большая разница между
SELECT
PERSONS_NAME,
PERSONS_ADDRESS,
PERSONS_CITY,
PERSONS_STATE
FROM
MYRECORDS MR
LEFT OUTER JOIN
MYDETAILS MD
ON MR.MYID = MD.MYID
WHERE
NOT PERSONS_ADDRESS IS NOT NULL
AND
(some other wx clauses)
и
SELECT
PERSONS_NAME,
PERSONS_ADDRESS,
PERSONS_CITY,
PERSONS_STATE
FROM
MYRECORDS MR
LEFT OUTER JOIN
MYDETAILS MD
ON MR.MYID = MD.MYID
AND
NOT PERSONS_ADDRESS IS NOT NULL
WHERE
(some other wx clauses)
Первая даст вам ТОЛЬКО записи, где существует АДРЕС ... пропуская записи, где только PERSONS_NAMEсуществует.
Второй даст вам ВСЕ PERSONS_NAMEs, но ВКЛЮЧИТ адресную информацию, когда PERSONS_ADDRESS существует.
Это плохой пример выше, но он иллюстрирует проблему:
Есливы используете поле в RIGHT TABLE в предложении WHERE, LOJ становится эквивалентом INNER JOIN - теряется значение LOJ.
Если вы добавляете условие в предложение ON, LOJ работаетКАК ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, но все еще сохраняет возможность включать ВЫБРАННЫЕ записи из ПРАВОЙ ТАБЛИЦЫ.
Извините за все УДЕРЖАННЫЕ слова, но уже поздно, мое видение мутное, и я хотел кое-что подчеркнутьДругой.Я забыл сейчас.