使用3个表mysql创建更新查询时遇到问题

时间:2015-02-14 22:10:46

标签: mysql

我在Akey表中有期末余额,我在cpp表中有池ID我想用akey closing_balance更新Bppd key_amount列的值但是之前 我必须检查default_pool =' ACTIVE'来自表cpp

提到了样本表

TABLE Akey (
  `id` int(11) NOT NULL,  
  `serial_key` varchar(82) DEFAULT NULL,
  `closing_balance` double(20,2) DEFAULT '0.00',
  `product_id` int(11) DEFAULT NULL,  
  PRIMARY KEY (`id`)
) 

TABLE Bppd(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pool_id` int(11) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL,
  `akey_id` int(11) DEFAULT NULL,
  `key_amount` double DEFAULT '0',
  `working_balance` double DEFAULT '0',
   PRIMARY KEY (`id`)
)

TABLE Cpp (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `akey_id` int(11) DEFAULT NULL,
  `pool_id` int(11) DEFAULT NULL,
  `default_pool` varchar(15) DEFAULT NULL,  
  PRIMARY KEY (`id`)
)

我有以下查询

UPDATE `Bppd` ppd
    JOIN AKey kk ON ppd.`akey_id` = kk.`id`
    JOIN `Cpp` pp ON pp.`akey_id` = kk.`id` AND pp.`default_pool` = 'ACTIVE' AND ppd.`akey_id` = pp.`akey_id`
    SET ppd.`key_amount`= kk.`closing_balance`

1 个答案:

答案 0 :(得分:0)

试试这个

UPDATE Bppd b INNER JOIN Akey a on a.id = b.akey_id AND a.product_id = b.product_id
INNER JOIN Cpp c ON b.key_id = c.akey_id AND b.pool_id = c.pool_id 
SET b.key_amount = a.closing_balance
WHERE c.default_pool='ACTIVE'

或者这个:

UPDATE Bppd b SET key_amount = (SELECT closing_balance FROM Akey a WHERE  a.id = b.akey_id and a.product_id = b.product_id)
WHERE EXISTS (
 SELECT 1 FROM Cpp c
 WHERE b.akey_id = c.akey_id AND b.pool_id = c.pool_id 
 AND c.default_pool='ACTIVE' 
 ) 
 AND EXISTS (
  SELECT 1 FROM Akey a 
  WHERE a.id = b.akey_id and a.product_id = b.product_id
 )