谁能告诉我根据标准,以下结果应该是什么(欢迎引用标准的正确部分)
> 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/