2010-01-07 58 views

回答

0

我剛發現在維基百科上此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 docsexamples

其他數據庫是否支持這個?它在哪裏記錄?


現在已經把我的骯髒的手套放在標準上,我會引用它。

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不會讓不是表名的查詢表達式可以更新。有關可更新視圖的工作正在進行中。我不確定該功能在視圖之外有多麼有用,但標準肯定是有趣的,並且比預期的更爲怪異。

[這裏感覺很孤單。儘量選擇我的答案]