11

これを実行しようとしています(SQL Serverで機能します):

WITH X AS (), Y AS (), Z AS ()
DELETE FROM TBL
WHERE TBL.ID IN (SELECT ID FROM Z);

これはOracleで機能します。

WITH X AS (), Y AS (), Z AS ()
SELECT * FROM TBL
WHERE TBL.ID IN (SELECT ID FROM Z);

ただし、DELETEは次のことを行いません。ORA-00928:SELECTキーワードがありません

私のサブクエリはかなり大きいですが、これを機能させるための別の構文はありますか?

4

3 に答える 3

13

SELECTステートメント以外ではサブクエリファクタリング/CTEを使用できません。ドキュメントから:

この句は、任意のトップレベルのSELECTステートメントおよびほとんどのタイプのサブクエリで指定できます。

あなたはこれを行うことができます:

DELETE FROM tbl WHERE tbl.id IN
(WITH X AS (), Y AS (), Z AS ()
SELECT id FROM TBL
 WHERE TBL.ID IN (SELECT ID FROM Z));
于 2011-07-06T21:37:41.587 に答える
8

私はこれを機能させました(SQL Serverでは機能しないと確信しています):

DELETE FROM TBL
WHERE TBL.ID IN (
    WITH X AS (), Y AS (), Z AS ()
    SELECT ID FROM Z
);
于 2011-07-06T21:43:43.927 に答える
1

少なくとも、エイリアス化されたすべてのクエリを何らかの方法でFROMステートメントに表示する必要があります。さらに問題があるかどうかはわかりませんが、それは必須です(そして、00928は、そうでない場合に発生するエラーであると私は信じています)。

于 2011-07-06T21:30:34.863 に答える