SQL标准中的“E153带子查询的可更新查询”是什么?

SQL标准中的“E153带子查询的可更新查询”是什么?,sql,standards-compliance,semantics,Sql,Standards Compliance,Semantics,我手头没有昂贵的SQL标准;什么是SQL core/foundation中的可更新查询 我看到PostgreSQL不支持它们,但其他一些数据库支持它们;你能给我指一下它们在这些数据库中如何工作的文档吗 PostgreSQL具有查询重写和可更新的视图;这很不一样吗?我刚刚在维基百科上找到了一个Oracle示例,它看起来像是更新左侧的一个选择: UPDATE ( SELECT * FROM articles JOIN classification c ON a.articleI

我手头没有昂贵的SQL标准;什么是SQL core/foundation中的可更新查询

我看到PostgreSQL不支持它们,但其他一些数据库支持它们;你能给我指一下它们在这些数据库中如何工作的文档吗


PostgreSQL具有查询重写和可更新的视图;这很不一样吗?

我刚刚在维基百科上找到了一个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款,“:A为 即使其包含

由于查询表达式也是一个不直观的表,但在涉及表的SQL99 4.16.3操作中,这意味着查询表达式是一个“可自定义表”。根据4.16,这意味着我可以插入和删除它们

这意味着我可以运行上述功能,以及:

DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);
sql99 foundation 7.11和7.12中还包含一些规则来确定哪些查询表达式是可更新的;他们相当参与。PostgreSQL不允许非表名的查询表达式可更新。在可更新视图上正在进行一些工作。我不确定该功能在视图之外有多有用,但该标准肯定很有趣,而且比预期的更奇怪

[这里感觉很孤独。选择我最好的答案。]