1

この単純なクエリがOracleでは正常に機能するのに、DB2では機能しない理由:

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

サブクエリを含む条件をwhere句に移動すると役立つ場合がありますが、これにより、外部結合が内部に制限されます。

4

2 に答える 2

1

あなたが持っているクエリを実行しようとすると、-338エラーが発生します。Information Center (リンクを参照) によると、ON句には次の制限があります。

JOIN 演算子または MERGE ステートメントに関連付けられた ON 句は、次のいずれかの理由で無効です。

* 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
于 2013-01-25T14:24:13.437 に答える
0

これは DB2 V10.1 で機能します。フィックスパックがインストールされていません。

于 2013-02-15T07:56:59.657 に答える