Как сделать Oracle (+) запрос левого соединения для нескольких столбцов - PullRequest
0 голосов
/ 11 января 2019

Мы используем Oracle 11. При выполнении LEFT JOIN, как показано ниже, результат запроса составляет 11 053 строки

…LEFT JOIN LIQ ON LIQ.ID = SEC.ID AND LIQ.UPD_DT  >= '08-JAN-19'
WHERE …

Но при выполнении LEFT JOIN с использованием (+), как показано ниже, результат запроса составляет 10 136 строк

...FROM SEC, LIQ
WHERE LIQ.ID (+)= SEC.ID AND LIQ.UPD_DT  >= '08-JAN-19'

Как использовать (+) с несколькими столбцами?

Спасибо.

1 Ответ

0 голосов
/ 11 января 2019

Краткий ответ - просто включить (+) для обоих терминов:

WHERE LIQ.ID (+) = SEC.ID AND LIQ.UPD_DT (+) >= '08-JAN-19'

хотя вы, похоже, сравниваете дату со строкой, полагаясь на неявное преобразование и настройки NLS; если это так, преобразуйте его или используйте литерал даты:

WHERE LIQ.ID (+) = SEC.ID AND LIQ.UPD_DT (+) >= DATE '2019-01-08'

Но переход от «современного» (после 1992 г.) синтаксиса соединения ANSI к древнему и проприетарному синтаксису Oracle кажется очень странным занятием. Даже Oracle рекомендует вы используете не используйте их синтаксис:

Oracle рекомендует использовать синтаксис FROM clause OUTER JOIN вместо оператора соединения Oracle. На запросы внешнего соединения, использующие оператор соединения Oracle (+), распространяются следующие правила и ограничения, которые не применяются к синтаксису FROM clause OUTER JOIN:
...

(хотя в их документах еще много примеров кода, которые бесполезно ...)

Раньше были некоторые ошибки в синтаксисе ANSI, и все еще могут быть редкие случаи, когда вы видите другое поведение или не можете использовать новый синтаксис; но это маловероятно, и если у вас есть запрос, который работает, то, похоже, нет никакого преимущества в регрессе к старым способам.

...