mysql的左連接問題


之前寫過一個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”,不知道有沒有辦法直接用一個語句實現,之前翻過很多資料,都沒有找到想要的答案,各位大神有沒有知道的,麻煩教教我,萬分感謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM