【问题标题】:What is “E153 Updatable queries with subqueries” in the SQL standard?什么是 SQL 标准中的“E153 带有子查询的可更新查询”?
【发布时间】:2011-01-02 11:22:52
【问题描述】:

我手头没有(昂贵的)SQL 标准;什么是 SQL 核心/基础中的可更新查询?

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

PostgreSQL 具有查询重写和可更新视图,rule system;这有很大不同吗?

【问题讨论】:

    标签: sql standards-compliance semantics


    【解决方案1】:

    我刚刚在 Wikipedia 上发现了这个 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
    

    链接:预言机reference docsexamples

    其他数据库支持吗?它记录在哪里?


    现在我已经把我肮脏的连指手套放在标准上,我将引用它。

    E153 指的是:

    第 7.12 条,“”:一个 是 可更新,即使它 包含一个

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

    这意味着我可以运行上面的,以及:

    DELETE FROM (SELECT * FROM t1 JOIN t2 WHERE t1c1 = t2c3);
    

    还有一些规则可以确定哪些查询表达式是可更新的,包含在 sql99-foundation 7.11 和 7.12 中;他们相当参与。 PostgreSQL 不允许非表名的查询表达式可更新。正在对可更新视图进行一些工作。我不确定这个功能在视图之外有多大用处,但这个标准肯定很有趣,而且比预期的更奇怪。

    [这里感觉很孤单。选择我的答案为最佳。]

    【讨论】:

      猜你喜欢
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多