问题
实习中,要求同步多表数据,使数据保持一致,首先就想到使用UPDATE,便有下面的SQL:
UPDATE table_a a
SET (a.atr1,a.atr2,a.atr3)=(SELECT b.atr1,b.atr2,b.atr3
FROM table_b b
WHERE a.related_id=b.id
上面的SQL明显是错误的,因为当b中存在和a相关联的行时,确实会执行操作,使数据同步,但当b中没有和a相关联的行时,select的结果为null,但update也会修改数据,使a中的行修改为null。
应在update后加where exists条件:
UPDATE table_a a
SET (a.atr1,a.atr2,a.atr3)=(SELECT b.atr1,b.atr2,b.atr3
FROM table_b