Re: [SQL ] update multiple-table 語法求教
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章