我有三张表格如下。
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'
最终结果是'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) ;
答案 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