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

作者: JeremyJoung (J.J.)   2016-08-14 22:52:12
※ 引述《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
:

Links booklink

Contact Us: admin [ a t ] ucptt.com