我正在开发一个Teradata系统,其中我有两个表,Apple
为A
& Ball
为B
。 Apple
有2列primId(integer)
和updateValue(INteger)
。 B
只有primId(integer)
。我要做的是,在A.primId=B.primId
时,将updateValue=1
其他设置为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;
我收到的查询错误无效,我还没有其他条款。你能帮忙的话,我会很高兴。
答案 0 :(得分:0)
请避免使用隐式连接语法(以逗号分隔)并使用适当的连接语法:
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 ;
答案 1 :(得分:0)
请你试试这个:
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
答案 2 :(得分:0)
此查询是您问题的直接翻译:
update apple
set updatevalue = (case when exists (select 1 from ball b where apple.primId = b.primId)
then 1 else 0
end);
答案 3 :(得分:0)
update a
from apple a
left outer join ball b
on a.primId=b.primId
set updatevalue= (case when b.primId is not null then 1 else 0 end) ;
试试这个。
答案 4 :(得分:0)
Teradata在更新中不支持外部联接,但您可以在FROM:
中执行此操作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;