首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Teradata :使用join和if子句更新表值

Teradata :使用join和if子句更新表值
EN

Stack Overflow用户
提问于 2016-09-19 18:00:50
回答 5查看 7.1K关注 0票数 1

我在一个Teradata系统上工作,其中我有两个表,Apple as ABall as BApple有两列primId(integer)updateValue(INteger)B只有primId(integer)。我尝试做的是,当A.primId=B.primId时,将updateValue=1 else设置为0

代码语言:javascript
复制
Table Apple:
Columns : Primary-key primId(Integer)
Other Columns : updateValue-(Integer)

Table Ball :
Columns : Primary-key primId(INteger)

到目前为止我的问题是:

代码语言:javascript
复制
update apple from apple a, ball b set updatevalue=1 where a.primId=b.primId;

我收到一个无效的查询错误,而且我还没有else子句。任何帮助都会很好。

EN

回答 5

Stack Overflow用户

发布于 2016-09-20 02:40:43

Teradata不支持更新中的外部连接,但您可以在以下位置执行此操作:

代码语言:javascript
复制
UPDATE apple
FROM
 (
   SELECT a.primId, CASE WHEN b.primId IS NULL THEN 0 ELSE 1 END AS x
   FROM apple AS a
   LEFT JOIN ball AS b
     ON a.primId = b.primId
 ) AS src
SET upDateValue = src.x
WHERE apple.primId = src.primId

可能更高效:

代码语言:javascript
复制
UPDATE apple
SET upDateValue
  = COALESCE((SELECT 1 FROM ball WHERE ball.primId = apple.primId),0);

但我认为最好的解决方案是在多语句请求(MSR)中进行两次更新:

代码语言:javascript
复制
UPDATE apple
SET upDateValue = 1
WHERE EXISTS
 ( SELECT 1 FROM ball b WHERE apple.primId = b.primId)
;UPDATE apple
SET upDateValue = 0
WHERE updatevalue <> 1;
票数 1
EN

Stack Overflow用户

发布于 2016-09-19 18:05:20

请避免使用隐式join语法(逗号分隔),并使用适当的join语法:

代码语言:javascript
复制
UPDATE apple a
LEFT JOIN ball b
 ON(a.primId=b.primId)
SET updatevalue= CASE WHEN b.primId is NULL THEN 0 ELSE 1 END ;
票数 0
EN

Stack Overflow用户

发布于 2016-09-19 18:09:20

你能试试这个吗:

代码语言:javascript
复制
UPDATE a 
FROM apple a
LEFT JOIN ball b ON a.id = b.id
SET a.updatevalue = CASE WHEN b.id > 0 THEN 1 ELSE 0 END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39570366

复制
相关文章

相似问题

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