我有两张桌子。表A和表B.表A随着时间的推移而增长,表B具有固定的行数。表A只有当表A中的两列与tableB的RowID匹配且tableA中的状态小于9时,才需要将数据传输到tableB。
我想更新tableB如果匹配,如果没有,我希望tableB其余部分的其他值设置为' dummy'数据。
我可以更新匹配的位置,但我在设置不匹配的值时遇到了困难。
如何在匹配时更新tableB,将tableB的其余列设置为' dummy'数据?
任何帮助都是最有用的。
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
答案 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
。