我沒有(昂貴的)SQL標準; SQL核心/基礎中的可更新查詢是什麼?什麼是SQL標準中的「帶子查詢的E153可更新查詢」?
我看到PostgreSQL不支持它們,但是其他一些數據庫卻支持它們;你能指點我關於他們如何在這些數據庫中工作的文檔嗎?
PostgreSQL具有查詢重寫和可更新的視圖rulesystem;這是非常不同的?
我沒有(昂貴的)SQL標準; SQL核心/基礎中的可更新查詢是什麼?什麼是SQL標準中的「帶子查詢的E153可更新查詢」?
我看到PostgreSQL不支持它們,但是其他一些數據庫卻支持它們;你能指點我關於他們如何在這些數據庫中工作的文檔嗎?
PostgreSQL具有查詢重寫和可更新的視圖rulesystem;這是非常不同的?
我剛發現在維基百科上此Oracle例如,看起來在更新的左側像SELECT:
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
鏈接:The oracle reference docs,examples。
其他數據庫是否支持這個?它在哪裏記錄?
現在已經把我的骯髒的手套放在標準上,我會引用它。
E153是指:
子條款7.12,「<查詢 表達>」:一個<查詢表達式>是 可更新的,即使其<其中 子句>包含<子查詢>
由於查詢表達式也是一個表(不直觀,但它在SQL99 4.16.3涉及表的操作中),這意味着查詢表達式是一個「udpatable表」。根據4.16,意味着我可以插入和刪除它們。
這意味着我可以運行上面,以及:
DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);
有一些更多的規則,以確定哪些查詢表達式是可更新的,包含在SQL99基金會7.11和7.12;他們相當參與。 PostgreSQL不會讓不是表名的查詢表達式可以更新。有關可更新視圖的工作正在進行中。我不確定該功能在視圖之外有多麼有用,但標準肯定是有趣的,並且比預期的更爲怪異。
[這裏感覺很孤單。儘量選擇我的答案]