Почему подзапрос не работает в предложении 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