如果表匹配则更新将其余设置为misc内容

时间:2015-08-03 16:45:46

标签: sql sql-server sql-server-2008

我有两张桌子。表A和表B.表A随着时间的推移而增长,表B具有固定的行数。表A只有当表A中的两列与tableB的RowID匹配且tableA中的状态小于9时,才需要将数据传输到tableB。

我想更新tableB如果匹配,如果没有,我希望tableB其余部分的其他值设置为' dummy'数据。

我可以更新匹配的位置,但我在设置不匹配的值时遇到了困难。

如何在匹配时更新tableB,将tableB的其余列设置为' dummy'数据?

任何帮助都是最有用的。

enter image description here enter image description here

 IF EXISTS (SELECT DISTINCT b.* 
               FROM   tableB b 
                      INNER JOIN tableA a 
                              ON b.workcell = a.enclosureloc 
                                  OR b.workcell = a.panelloc 
               WHERE  ( b.workcell = a.enclosureloc 
                         OR b.workcell = a.panelloc ) 
                      AND a.status < 9) 
      UPDATE b 
      SET    b.job = a.job, 
             b.date = a.date, 
             b.enclosureloc = a.enclosureloc, 
             b.panelloc = a.panelloc
      FROM   tablea b 
             INNER JOIN tableA a 
                     ON b.workcell = a.enclosureloc 
                         OR b.workcell = a.panelloc 
      WHERE  a.status < 9 
    ELSE --I am Stuck HERE...Maybe there is an easier way in General???
      UPDATE b 
      SET    b.job = '123', 
             b.date = '00-00', 
             b.enclosureloc = 99, 
             b.panelloc = 99 
      FROM   tablea b  

1 个答案:

答案 0 :(得分:1)

您可以更改为LEFT JOIN,并使用COALESCE(b.value,'junk value')

  UPDATE a 
  SET    a.job = COALESCE(b.job,'123'), 
         a.date = COALESCE(b.date,'00-00'), 
         a.enclosureloc = COALESCE(b.enclosureloc,99),
         a.panelloc = COALESCE(b.panelloc,99)
  FROM   tablea a 
         LEFT JOIN tableB b 
                 ON (a.workcell = b.enclosureloc OR a.workcell = b.panelloc) 
                  AND b.status < 9 

根据上述内容,您认为完全不需要任何IF..ELSE

修改:还需要将WHERE条件移至JOIN,因为它会否定LEFT JOIN