Re: [SQL ] update multiple-table 語法求教

看板Database (資料庫)作者 (J.J.)時間8年前 (2016/08/14 22:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/5 (看更多)
※ 引述《jonce007》之銘言: : Query OK, 0 rows affected (0.00 sec) : Rows matched: 1 Changed: 0 Warnings: 0 : matched: 符合條件有1筆 : 因為要更改的值和原來一樣,所以changed=0 : 先歸零一下再跑: : update pb1 set opi=0, oyd=0, okg=0; : UPDATE pb1 join (select pbin, sum(opi) pi , sum(oyd) yd, sum(okg) kg from pb1 : where pbin='020417008' &&pbon<>'' group by pbin) AS pb2 ^^^^^^^^^ 你這邊強制限制了pbin的範圍 這樣會讓整體運算沒有意義 另外 MySQL中 Changed: 0 的意思是 雖然有比對到符合資料 但是卸入後不會有任何"實際"改變 所以就會忽略寫入 而 你剛剛的動作已經把020417008寫入過一次 之後的命令 也只會產生020417008的一筆結果 所以就會沒有改變 另外 MySQL中在MULTI UPDATE中 有一個使用限制 那就是被改變的TABLE 不可以以SELECT的形式 出現在SUB-QUERY中 如果違反規則 就會具體吐出錯誤訊息 一般來說 都必須用JOIN來處理 但是 到底怎樣的動作算是違反規則 我還抓不出具體範圍 目前我只知道 WHERE IN(SELECT), SET=(SELECT) 這兩個都不行 剩下的還沒試過 但是 不是每種動作都會有這種衝突 : SET pb1.opi=pb2.pi : , pb1.oyd=pb2.yd : , pb1.okg=pb2.kg : WHERE pb1.pbin=pb2.pbin && pb1.pbon=''; : Query OK, 1 row affected (0.00 sec) : Rows matched: 1 Changed: 1 Warnings: 0 : 所以只是我耍白痴,看不懂mysql訊息而己XD : ------------------------------------------------------------------------- : 我不懂的是: : 如果 : select pb1.pbin,pb2.pbin,pb1.ipi,pb1.iyd, pb1.ikg, pb2.pi, pb2.yd, pb2.kg : from pb1 join : (select pbin, sum(opi) pi , sum(oyd) yd, sum(okg) kg from pb1 : where pbon<>'' &&pb1.pbin='020417008'group by pbin) : AS pb2 on pb1.pbin=pb2.pbin : WHERE pb1.pbon='' ; : +-----------+-----------+------+------+------+------+------+------+ : | pbin | pbin | ipi | iyd | ikg | pi | yd | kg | : +-----------+-----------+------+------+------+------+------+------+ : | 020417008 | 020417008 | 51.0 | 6810 | 0.00 | 51.0 | 6810 | 0.00 | : +-----------+-----------+------+------+------+------+------+------+ : 得到我想到的數據, : 一模一樣的句子拿來做update : update pb1 join : (select pbin, sum(opi) pi , sum(oyd) yd, sum(okg) kg from pb1 : where pbon<>'' &&pb1.pbin='020417008'group by pbin) : AS pb2 on pb1.pbin=pb2.pbin : set pb1.oyd=pb2.yd : ,pb1.opi=pb2.pi : ,pb1.okg=pb2.kg : WHERE pb1.pbon='' ; : 得到的卻是: : Query OK, 0 rows affected (0.00 sec) : Rows matched: 1 Changed: 0 Warnings: 0 : matched 和 changed 的不同關鍵在那裡? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.72.102 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1471186334.A.920.html
文章代碼(AID): #1Ni8MUaW (Database)
文章代碼(AID): #1Ni8MUaW (Database)