私は (高価な) SQL 標準を手元に持っていません。SQLコア/ファウンデーションの更新可能なクエリとは何ですか?
PostgreSQL はそれらをサポートしていないようですが、他のいくつかのデータベースはサポートしています。これらのデータベースでそれらがどのように機能するかについてのドキュメントを教えてもらえますか?
PostgreSQL には、ルール システムによるクエリの書き換えと更新可能なビューがあります。これは非常に異なっていますか?
私は (高価な) SQL 標準を手元に持っていません。SQLコア/ファウンデーションの更新可能なクエリとは何ですか?
PostgreSQL はそれらをサポートしていないようですが、他のいくつかのデータベースはサポートしています。これらのデータベースでそれらがどのように機能するかについてのドキュメントを教えてもらえますか?
PostgreSQL には、ルール システムによるクエリの書き換えと更新可能なビューがあります。これは非常に異なっていますか?
ウィキペディアで、更新の左側にある SELECT のように見えるこの Oracle の例を見つけました。
UPDATE (
SELECT *
FROM articles
JOIN classification c
ON a.articleID = c.articleID
) AS a
SET a.[updated_column] = updatevalue
WHERE c.classID = 1
ほとんどのデータベースでは、クエリを次のように記述する必要があります。
UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a
JOIN classification c
ON a.articleID = c.articleID
WHERE c.classID = 1
他のデータベースはこれをサポートしていますか? それはどこに文書化されていますか?
汚れたミトンを標準に置いたので、引用します。
E153 は以下を指します。
7.12 項「<クエリ式>」: <クエリ式> は、その <where 句> に <サブクエリ> が含まれていても更新可能です。
クエリ式もテーブルであるため (直感的ではありませんが、SQL99 4.16.3 テーブルに関する操作にあります)、クエリ式が「更新可能なテーブル」であることを意味します。4.16によれば、これは、それらにINSERTおよびDELETEできることを意味します。
つまり、上記に加えて次を実行できます。
DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);
sql99-foundation 7.11 および 7.12 に含まれる、更新可能なクエリ式を決定するためのルールがいくつかあります。彼らはむしろ関与しています。PostgreSQL では、テーブル名ではないクエリ式を更新できません。更新可能なビューでいくつかの作業が行われています。この機能がビューの外でどれほど役立つかはわかりませんが、標準は間違いなく興味深いものであり、予想よりも奇妙です。
【ここは寂しい。私の答えを最高のものとして選んでください。]