加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 为什么我不能使用With关键字同时更新多个列?

发布时间:2020-12-12 08:56:34 所属栏目:MsSql教程 来源:网络整理
导读:我有一个下面显示的更新语句工作正常,我在子查询中使用了with语句来大大提高性能但是由于某种原因我不允许从同一个表中添加额外的列来更新. 作品: UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One FROM Table_Two t,Table_A a
我有一个下面显示的更新语句工作正常,我在子查询中使用了with语句来大大提高性能但是由于某种原因我不允许从同一个表中添加额外的列来更新.

作品:

UPDATE Table_A SET (Col_One) = (WITH OneValue AS (SELECT DISTINCT t.Col_One
                                                  FROM Table_Two t,Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One FROM OneValue);

我想要做的只是包括另一个列来更新table_two像这样

UPDATE Table_A SET (Col_One,Col_Two) = (WITH OneValue AS (SELECT DISTINCT t.Col_One,T.Col_two
                                                  FROM Table_Two t,Table_A a
                                                  WHERE t.id = a.New_Id))
                                SELECT Col_One,Col_Two FROM OneValue);

但我得到ora-01767更新集表达式必须是子查询.我理解这个错误,但没看到我是如何生成它的.任何帮助是极大的赞赏.

提前致谢.

解决方法

这似乎有效(无论如何使用DUAL进行简单查询):
UPDATE Table_A SET (Col_One,Col_Two) = (select col_one,col_two from
                                          (WITH OneValue AS (SELECT DISTINCT t.Col_One,Table_A a
                                                  WHERE t.id = a.New_Id))
                                           SELECT Col_One,Col_Two FROM OneValue)
                                        );

至于为什么如果子查询以“WITH”开头它不起作用,我只能想象这是因为Oracle SQL的设计者没有预料到这种用法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读