MySQL更新脚本来计算条目

时间:2011-01-05 01:07:23

标签: mysql sql-update

我有三张表格如下。

TBL1

eid qnt   pb
12     3   1
13     1   1
23     3   1

TBL2

tid   eid  fx   so
1      12    0    1
2      13    0    1
3      23    1    1
4      23    0    1

TBL3

tlid   tid  eid  fx
1      1    12    0
2      1    12    0
3      2    13    0
4      3    23    1
5      4    23    0

需要一个更新查询来计算'tbl3'中

'tb1'中的'pb'是'1'

'tbl2'中的'eid'如果是'fx'则不会有'1'

如果“tbl3”中的总计数“tlid”比“tbl1”中的“qnt”少,则将“tbl2”中的“so”更新为“0”

最终结果是'tbl2'中'tid 1'的'so'将为'0'

其他人不会更新,因为:

'tbl1'中'tll'的'tll'与'tble3'中的'eid 13'的'tll'总和'tbl1'中的'qnt'

'tbl3'中'eid 23'的'tlid'将不计算在'tbl2'中'ex 23'中的'fx'中有'1'

感谢您的帮助

drop table if exists tbl1;
create table tbl1 (eid integer, qnt integer, pb integer);
insert into tbl1 values (12,3,1),(13,1,1),(23,3,1);

drop table if exists tbl2;
create table tbl2 (tid integer, eid integer, fx integer, so integer);
insert into tbl2 values (1,12,0,1),(2,13,0,1),(3,23,1,1),(4,23,0,1);

drop table if exists tbl3;
create table tbl3 (tlid integer, tid integer, eid integer, fx integer);
insert into tbl3 values (1,1,12,0),(2,1,12,0),(3,2,13,0),(4,3,23,1),(5,4,23,0) ;

1 个答案:

答案 0 :(得分:1)

试试这个:

UPDATE tbl2, 
       (SELECT * 
        FROM   (SELECT tbl1.eid, 
                       tbl1.qnt, 
                       tbl3.tid, 
                       COUNT(DISTINCT tlid) cnt 
                FROM   tbl1, 
                       tbl3, 
                       tbl2 
                WHERE  tbl1.eid = tbl3.eid 
                       AND tbl2.eid = tbl3.eid 
                       AND pb = 1 
                       AND tbl2.eid NOT IN (SELECT tbl2.eid 
                                            FROM   tbl2 
                                            WHERE  fx = 1) 
                GROUP  BY tbl1.eid, 
                          tbl3.tid, 
                          tbl1.qnt) a 
        WHERE  cnt < qnt) b 
SET    so = 0 
WHERE  tbl2.tid = b.tid