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