SQL查询更新有条件

时间:2016-03-28 12:36:50

标签: sql sql-server-2008

我有2张桌子

aaa
on_date datetime null,
channel_id numeric(10,0) null,
type_id  numeric(10,0) null,
amount numeric(10,0) null

bbb
channel_id  numeric(10,0) null
type_id numeric(10,0) null

我想将 aaa.amount 的更新更新为0

  1. 当bbb.type_id不是时,只有公共channel_ids和type_ids 空
    1. 只有公共channel_ids和所有type_ids时 bbb.type_id为null

      AAA

      2014-09-13 1 3 12

      2014-09-13 1 4 16

      2014-09-13 2 1 11

      bbb(案例1)

      1 3

      bbb(案例2)

      1 null

    2. 在第一种情况下,只有第一个aaa记录的数量应为0 在第二种情况下,aaa的前2个记录的数量应为0 谢谢

2 个答案:

答案 0 :(得分:2)

试试这个:

update a
set a.amount=0
from aaa a inner join bbb b 
on a.channel_id=b.channel_id
where ((a.channel_id=b.channel_id and a.type_id=b.type_id and b.type_id IS NOT NULL)
OR (a.channel_id=b.channel_id and b.type_id IS NULL))

答案 1 :(得分:1)

根据我的理解你的问题,你需要做出类似的事情

UPDATE
    aa
SET
    aa.amount  = 0 
FROM
    aaa aa
    JOIN
    bbb bb ON aa.channel_id  =bb.channel_id      
WHERE
    (aa.type_id = bb.type_id AND bb.type_id is not null ) 
    OR
    (bb.type_id is null) 

希望它对你有所帮助。