Почему подзапрос не работает в предложении ON в DB2

Почему этот простой запрос отлично работает в Oracle, но не работает в DB2:

select * 
from 
sysibm.dual d1 
left join sysibm.dual d2 on 1=1 and exists (select 1 from sysibm.dual)

Перемещение условия, связанного с подзапросом, в положение where может помочь, но это ограничит внешнее соединение во внутреннее.

2 ответа

Когда я пытаюсь выполнить ваш запрос, я получаю -338 ошибка, по которой, согласно Информационному центру (см. ссылку), существуют следующие ограничения ON пункт:

Предложение ON, связанное с оператором JOIN или в операторе MERGE, недопустимо по одной из следующих причин.

* The ON clause cannot include any subqueries.
* Column references in an ON clause must only reference columns
  of tables that are in the scope of the ON clause.
* Scalar fullselects are not allowed in the expressions of an ON clause.
* A function referenced in an ON clause of a full outer join 
  must be deterministic and have no external action.
* A dereference operation (->) cannot be used.
* A SQL function or SQL method cannot be used.
* The ON clause cannot include an XMLQUERY or XMLEXISTS expression.

Я не уверен, если это возможно с вашим запросом, но вы думаете, возможно, вы могли бы переписать что-то вроде этого:

select * 
from 
sysibm.dual d1 
left join (
    SELECT dl.*,
    CASE WHEN EXISTS (SELECT 1 FROM sysibm.dual)
         THEN 1
         ELSE 0
    END AS jn
    FROM sysibm.dual dl
) D2
  on 1=1 and 1=d2.jn

Это работает в DB2 V10.1! Пакет исправлений не установлен.

Другие вопросы по тегам