2013-01-31 40 views
0

我已经创建了以下SQL代码来迁移我们的数据库。 UP查询工作正常,但我无法弄清楚如何修复DOWN查询。我只想插入所有在payment_gateway表中的数据,但也必须匹配正确的reseller_shop.id。数据迁移脚本INSERT INTO

// UP 
INSERT INTO payment_gateway (`type`, account, keyIn, keyOut, resellerShopId) 
SELECT 'paymentGatewayOgone', rs.ogoneAccount, rs.ogoneSignatureIn, rs.ogoneSignatureOut, rs.id 
FROM reseller_shop AS rs 
WHERE rs.ogoneAccount <> ''; 

// DOWN 
INSERT INTO reseller_shop (ogoneAccount, ogoneSignatureIn, ogoneSignatureOut) 
SELECT pg.account, pg.keyIn, pg.keyOut 
FROM payment_gateway AS pg 
WHERE pg.type = 'paymentGatewayOgone' 
AND reseller_shop.id = pg.resellerShopId 
+0

查询有什么问题? – Bulat

+0

基本上很奇怪你需要引用你插入的表。如果需要,您应该在'SELECT'语句和'INNER JOIN' payment_gateway和reseller_shop中使用该表。 – Bulat

回答

2

似乎我不得不使用UPDATE而不是INSERT INTO的。

UPDATE reseller_shop AS rs, payment_gateway AS pg 
SET rs.ogoneAccount = pg.account, rs.ogoneSignatureIn = pg.keyIn, rs.ogoneSignatureOut = pg.keyOut 
WHERE pg.type = 'paymentGatewayOgone' 
AND rs.id = pg.resellerShopId 
1
INSERT INTO reseller_shop (ogoneAccount, ogoneSignatureIn, ogoneSignatureOut) 
SELECT pg.account, pg.keyIn, pg.keyOut FROM payment_gateway AS pg 
WHERE pg.type = 'paymentGatewayOgone' AND pg.resellerShopId in 
(select reseller_shop.id from reseller_shop_id) 

希望这有助于

0

有些事情是这样的:

INSERT INTO reseller_shop (ogoneAccount, ogoneSignatureIn, ogoneSignatureOut) 
SELECT pg.account, pg.keyIn, pg.keyOut 
FROM payment_gateway AS pg 
    INNER JOIN reseller_shop AS rs ON rs.id = pg.resellerShopId 
WHERE pg.type = 'paymentGatewayOgone' 

或:

INSERT INTO reseller_shop (ogoneAccount, ogoneSignatureIn, ogoneSignatureOut) 
SELECT pg.account, pg.keyIn, pg.keyOut 
FROM payment_gateway AS pg 
WHERE pg.type = 'paymentGatewayOgone' 
    AND EXISTS (SELECT * 
       FROM reseller_shop AS rs 
       WHERE rs.id = pg.resellerShopId)