首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“with”子句进行更新

使用“with”子句进行更新
EN

Stack Overflow用户
提问于 2014-03-24 16:33:06
回答 2查看 5K关注 0票数 1

我在sql server数据库中有以下关系:

假设我想对这个关系做一些修改。我想删除CPU_TYPE表,并在计算机表中添加一列“cpu”。

现在,我希望在sql server中使用'with‘子句来查询从两个表中连接的数据,并执行update语句来更新计算机表。

此sql server查询:

代码语言:javascript
复制
SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId, 
CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
FROM COMPUTER LEFT OUTER JOIN
CPU_TYPE ON COMPUTER.cpuId = CPU_TYPE.cpuId

结果如下:

现在,我将使用'with‘子句创建一个数据集,如下所示:

代码语言:javascript
复制
with ds as
(
SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId, 
CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
FROM COMPUTER LEFT OUTER JOIN
CPU_TYPE ON COMPUTER.cpuId = CPU_TYPE.cpuId
)
update ds set cpu = name +', '+ cpuSpeed;

结果如下:

查询已成功执行,但问题是计算机表没有更改!如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-24 16:53:24

你的密码没问题。你的数据被关闭了。CPUSpeedNULL,所以连接的结果总是NULL。所以,使用coalesce()

代码语言:javascript
复制
with ds as (
      SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId, 
             CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
      FROM COMPUTER LEFT OUTER JOIN
           CPU_TYPE
           ON COMPUTER.cpuId = CPU_TYPE.cpuId
     )
update ds
     set cpu = name +', '+ coalesce(cpuSpeed, '');
票数 2
EN

Stack Overflow用户

发布于 2014-03-24 16:48:59

只需尝试这个而不是使用CTE。

代码语言:javascript
复制
UPDATE COMPUTER 
SET cpu = name + ', ' + cpuSpeed
FROM COMPUTER C1 LEFT OUTER JOIN
CPU_TYPE ON C1.cpuId = CPU_TYPE.cpuId
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22615217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档