sql - SQL 标准对 UPDATE 中的 "dependent"条件有什么看法?

标签 sql standards

谁能告诉我根据标准,以下结果应该是什么(欢迎引用标准的正确部分)

> select * from t1;
+------+
| col1 |
+------+
|    9 |
|    8 |
|   10 |
+------+
> update t1
    set col1 = col1 * 2
    where col1 <= (select avg(col1) from t1);

重点是:最后一行是否得到更新,因为如果按顺序更新行并且为每行重新计算平均值,它会满足条件,还是不会更新,因为此语句更改的任何数据只会整个语句运行后可读吗?

编辑
而这个案子呢?
> select * from t1;
+------+------+
| col1 | col2 |
+------+------+
|    9 |    1 |
|    8 |    2 |
|   10 |    2 |
+------+------+
> update t1 p1
    set col1 = col1 * 2
    where col1 <= (select avg(col1)
                     from t1
                     where col2=p1.col2);

最佳答案

关于第一个查询,subquery首先执行,所以平均没有变化......

关于第二个查询,您在 UPDATE 中使用别名语句,但您以错误的方法使用别名。

UPDATE 中使用别名的正确和标准方法声明是:

UPDATE p1
     set col1 = col1 * 2
from t1 p1
     where col1 <= (select avg(col1)
                     from t1
                     where col2=p1.col2);

关于sql - SQL 标准对 UPDATE 中的 "dependent"条件有什么看法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963012/

相关文章:

mysql - SELECT COUNT 非零单元格 mysql

sql - 为什么临时表和子查询之间存在巨大的性能差异

mysql - 缺少 mysql.h 并试图找到 mysql-devel

internationalization - 次要货币单位有 ISO 标准吗?

sql - 在 POSTGRESQL 中比较 2 个巨大表的更有效方法

java - MySQL 语法错误 |您的 SQL 语法有错误;

user-interface - 关于禁用或隐藏菜单项的规则

clojure - Clojure 是否遵循 Common Lisp 标准?

c++ - 为什么变量不是 C++ 中的左值?

c - "Illegal hardware instruction"来自非常简单的代码