2010-11-23 29 views
2

J'ai besoin d'aide avec cette mise à jour MySQLRequête de mise à jour MySQL

J'ai trois tables comme ci-dessous.

tbl1 
id eid quantity 
1 3  2 
2 4  3 

tbl2 
tid eid qnty status type 
1 3 1  1   1 
2 3 0  1   0 
3 4 1  1   1 
4 4 0  1   0 

tbl3 
id tid type 
1 1 1 
2 2 0 
3 3 1 
4 4 0 

je besoin d'une mise à jour sql:

Rechercher X

Trouver Y

Puis état de mise à jour en tbl2 à 0 si X - Y> 0

X = tbl1 .quantity - sum (tbl2.qnty) où tbl1.eid = tbl2.eid ET type = 1

En d'autres termes:

X = tbl1.quantity en ce que eid - somme (tbl2.qnty) en ce que eid WHERE type = 1

Ainsi pour X 4 eid = 2 et X pour eid 3 = 1

Y = COUNT SELECT (tbl3.id) dE TBL3 OU tbl2.tid = tbl3.tid eT type = 0 GROUP BY tid

Ainsi tid 2 = 1 et 4 tid = 1

état de mise à jour en tble2 à 0 si X - Y> 0

Le résultat final sera que le statut de tbl2.tid: 4 sera mis à jour à 0 parce que 2 - 1 = 1

Votre (vos) contribution (s) sont appréciées.

+1

Ont été aidé d'ailleurs, et ceci est le script: mise à jour tbl2 set status = 0 où type = 0 AND eid dans (select distinct eid de ( select A.eid, X, Y de ( SELECT tbl1.eid, (tbl1.quantity - somme (tbl2.qnty)) AS X DE tbl1, tbl2 OÙ tbl1.eid = tbl2. eid ET TYPE = 1 tbl1.eid GROUP BY) comme JOIN ( COUNT SELECT (tbl3.id) AS Y, tbl2.eid dE tbl2, TBL3 OÙ tbl2.tid = ET tbl3.tid tbl2.type = 0 GROUP BY tbl2.tid ) en tant que B ON A.id = B.id AYANT X - Y> 0 ) en tant que C ); –

Répondre

0

Je ne peux pas le vérifier en ce moment, donc je ne suis pas sûr à 100% sur la syntaxe, mais je pense que vous pouvez faire quelque chose comme ceci:

mise à jour tbl2 rejoindre tbl1 sur tbl1.eid = tbl2 .eid joint tbl3 sur tbl2.tid = tbl3 set status = 0 où tbl2.type = 1 et tbl1.quantity - somme (tbl2.qnty) - (sélectionnez count (tbl3.id) FROM tbl3 O WH tbl2.tid = tbl3.tid ET type = 0 GROUP BY tid)> 0

+0

Merci Rivka pour l'entrée. Got: # 1111 - Utilisation incorrecte de la fonction de groupe. Une idée? –