我手头没有(昂贵的)SQL标准;什么是SQL核心/基础中的可更新查询?
我看到PostgreSQL不支持它们,但其他一些数据库却支持它们;你能指点我在这些数据库中如何工作的文件吗?
答案 0 :(得分: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
链接:oracle reference docs,examples。
其他数据库是否支持此功能?它在哪里记录?
现在把我的肮脏手套放在标准上,我只是引用它。
E153指的是:
7.12,“<查询 表达式>“:A<查询表达式>是 即使它的< where也可以更新 条款>包含<子查询>
由于查询表达式也是一个表(不直观,但它在SQL99 4.16.3涉及表的操作中),这意味着查询表达式是一个“udpatable表”。根据4.16意味着我可以插入并删除它们。
这意味着我可以运行上述内容,以及:
DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);
还有一些规则来确定哪些查询表达式是可更新的,包含在sql99-foundation 7.11和7.12中;他们很参与。 PostgreSQL不允许不是表名的查询表达式可更新。在可更新视图上正在进行一些工作。我不确定这个功能在视图之外是多么有用,但是标准肯定很有趣,而且比预期的还要怪。
[这里感到孤独。尽可能地回答我的答案。]