凌乱的SQL问题

时间:2010-01-07 16:52:14

标签: sql

表A将数据存储在

行中
id, value1, value2

其中id始终为偶数。表B以

的形式存储此数据
id,   value1
id-1, value2

或者

id,   value1+value2

我需要使用表A中的值对表B进行一次性更新。 有没有优雅的方法呢?


澄清:

要回答下面Nate CK的问题(这是问题的核心),了解哪种安排适用于表A中的记录的唯一方法是检查表B中的值(id)。这就是问题混乱的原因。

3 个答案:

答案 0 :(得分:2)

假设您想要的逻辑是以下

  • 其中id和id - 1都在tableb中,更新两行
  • 其中不存在id-1行,更新id为value1 + value 2

然后这应该工作

update b
set b.value = a.value1
from tableb b join tablea a on a.id = b.id
where 0 = a.id % 2
and a.id - 1 in (select id from tableb)

update b
set b.value = a.value2
from tableb b join tablea a on a.id = b.id - 1
where 0 = a.id % 2
and a.id - 1 in (select id from tableb)

update b
set b.value = a.value1 + a.value2
from tableb b join table a on a.id = b.id
and a.id - 1 not in (select id from tableb)

答案 1 :(得分:1)

将B设置为(id,value1),(id + 1,value2) - 仅当B中存在id + 1时才设置后者

update b
  set b.value = a.value1
  from tableb b join table a on a.id = b.id
  where 0 = a.id % 2

update b
  set b.value = a.value2
  from tableb b join table a on a.id = b.id - 1
  where 0 = a.id % 2

现在,对于id + 1不在B中的id,将value2添加到id。

update b
  set b.value += (select a.value2 from a where a.id = b.id)
  where b.id - 1 not in (select id from b)

答案 2 :(得分:0)

Update b SET b.value1 = a.value1 FROM
TableB b INNER JOIN TableA a ON a.id = b.id