之前寫過一個mysql語句,功能是將一個表ds的一個字段值同步更新到另一個表bk的字段,不過不是全部,只更新表bk中有的數據,如果表bk中有而表ds中沒有,表B對應的這個字段值就為空
UPDATE bk LEFT JOIN ds ON bk.`a`=ds.`a` SET bk.`STATUS`=ds.`STATUS` WHERE ds.`OWNER`='admin';
上面這個語句一眼看過來是應該可以實現我要的功能的,但是實際情況是這個語句只更新了表bk和表ds都有的數據,表B中有而表A中沒有的數據保持原來的值,並未修改到。后來查看了很多資料才找到問題所在,因為我在WHERE子句里面有右表ds的字段約束,所以這個語句只會找到右表ds里面有的數據並更新到左表bk對應的數據
要達到我要的功能就不能在WHERE子句里面添加右表的字段約束,那右表的字段約束寫到哪里?
UPDATE bk LEFT JOIN ds ON bk.`a`=ds.`a` AND ds.`OWNER`='admin' SET bk.`STATUS`=ds.`STATUS`;
經過測試,把右表的字段約束寫到ON的條件里面,用AND與其他約束連接。
我這個是在用mysql的時候發現的問題,不知道在SQL Server會不會有這個問題,另外如果我想把表bk中有而表ds中沒有的數據對應的這個字段值修改成字符串“done”,不知道有沒有辦法直接用一個語句實現,之前翻過很多資料,都沒有找到想要的答案,各位大神有沒有知道的,麻煩教教我,萬分感謝!