我在一个Teradata系统上工作,其中我有两个表,Apple as A和Ball as B。Apple有两列primId(integer)和updateValue(INteger)。B只有primId(integer)。我尝试做的是,当A.primId=B.primId时,将updateValue=1 else设置为0。
Table Apple:
Columns : Primary-key primId(Integer)
Other Columns : updateValue-(Integer)
Table Ball :
Columns : Primary-key primId(INteger)到目前为止我的问题是:
update apple from apple a, ball b set updatevalue=1 where a.primId=b.primId;我收到一个无效的查询错误,而且我还没有else子句。任何帮助都会很好。
发布于 2016-09-20 02:40:43
Teradata不支持更新中的外部连接,但您可以在以下位置执行此操作:
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可能更高效:
UPDATE apple
SET upDateValue
= COALESCE((SELECT 1 FROM ball WHERE ball.primId = apple.primId),0);但我认为最好的解决方案是在多语句请求(MSR)中进行两次更新:
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;发布于 2016-09-19 18:05:20
请避免使用隐式join语法(逗号分隔),并使用适当的join语法:
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 ;发布于 2016-09-19 18:09:20
你能试试这个吗:
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 ENDhttps://stackoverflow.com/questions/39570366
复制相似问题