web-dev-qa-db-ja.com

DELETEステートメントでエイリアスを使用できないのはなぜですか?

Visual Studio 2010のSQL Server Compact Edition(おそらく、SQL ServerとSQL全般、私は知りません)では、このコマンドは機能します:

DELETE FROM foods WHERE (name IN ('chickens', 'rabbits'))

しかし、このコマンドは次のエラーを生成します:Error near identifier f. Expecting OUTPUT.

DELETE FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))
133

テーブルをエイリアスするには、次のように言う必要があります。

DELETE f FROM dbo.foods AS f WHERE f.name IN (...);

特に(少なくともIIRC)これが厳密なANSIに準拠していないため、この特定のDELETEステートメントのエイリアシングのポイントがわかりません。しかし、はい、コメントが示唆するように、他のクエリ形式(例:相関)に必要な場合があります。

203
Aaron Bertrand

Deleteステートメントの構文は奇妙です。こんなふうになります:

DELETE f FROM foods f WHERE (f.name IN ('chickens', 'rabbits'))
65
usr