有如下2个表chars和user
chars内容如下:
account  char01  char02  char03  charNum
AAA       000     111    <NULL>     2
BBB       023     112     021       3
CCC       102    <NULL>  <NULL>     1
……        ……     ……     ……      ……
user内容如下:
userID    ……    ……
021       ……    ……
023       ……    ……
102       ……    ……
111       ……    ……
……       ……    ……
现在想实现如下查询:
可以看到userID中少了一个000和112,我想用一条语句更新表chars中char01的000和char02的112分别为<NULL>,然后再把charNum的值分别减去1.更新后的chars表内容如下:
更新后的chars内容:
account  char01  char02  char03  charNum
AAA      <NULL>   111    <NULL>     1
BBB       023    <NULL>   021       2
CCC       102    <NULL>  <NULL>     1
……        ……     ……     ……      ……
不知道如何实现,多谢指教!!
注:charNum的值等于char01,char02和char03中非空值的和.

解决方案 »

  1.   

    我想要大批量操作,可能userID中有大量的值在chars都没有.
      

  2.   

    目前我用了如下的语句,可以修改掉char01,char02和char03的值,但是无法修改charnum的值.不知道该怎么写了.update chars set Char01=null where not exists ( select * from user where chars.Char01=user.userid )
    update chars set Char02=null where not exists ( select * from user where chars.Char02=user.userid )
    update chars set Char03=null where not exists ( select * from user where chars.Char03=user.userid )
      

  3.   

    select a.account,b.userid as char01,c.userid as char02,d.userid as char03,
           case when b.userid is null then 0 else 1 end +
           case when c.userid is null then 0 else 1 end +
           case when d.userid is null then 0 else 1 end as charnum
    from chars a
    left join user b on a.char01=b.userid
    left join user c on a.char02=c.userid
    left join user d on a.char03=d.userid
      

  4.   

    弄了半天还是有点问题,3楼的兄弟是写的查询的,不能修改,查询后得到的完全正确,就是不知道如果把查询的结果写入chars这个表,请高手帮忙,非常感谢.