2014-03-05 156 views
-1

我的两难困境是,我需要将我的事务表中的subscription_id更新为基于相同billerid的新subscription_id。UPDATE SELECT JOIN

我的订阅表具有来自不同账单的多个订阅记录的成员。我很难把这个更新选择/连接到一起在MySQL上。

TBL subscription_id

 
+--------------------+---------------+----------+ 
| subscription_id | memberid  | billerid | 
+--------------------+---------------+----------+ 
12345    | A    | ?  | 
+--------------------+---------------+----------+ 
67890    | A    | 13  | 
+--------------------+---------------+----------+ 
11222    | B    | 13  | 
+--------------------+---------------+----------+ 
91422    | B    | ?  | 
+--------------------+---------------+----------+ 

TBL交易

 
+---------------+-----------------+----------+ 
| trans_id  | subscription_id | billerid | 
+---------------+-----------------+----------+ 
00012   | 12345   | 13  | 
+---------------+-----------------+----------+ 
02013   | 12345   | 13  | 
+---------------+-----------------+----------+ 
08013   | 11222   | 13  | 
+---------------+-----------------+----------+ 
50013   | 11222   | 13  | 
+---------------+-----------------+----------+ 
+0

因为我没有说明这正确的,我怎么会更新TRANS_ID的00012和02013有67890的的subscription_id? – user3293836

回答

1
UPDATE transaction AS t 
JOIN (SELECT s1.subscription_id AS old_subid, 
      s2.subscription_id AS new_subid, 
      s2.billerid AS billerid 
     FROM subscription_id AS s1 
     JOIN subscription_id AS s2 ON s1.memberid = s2.memberid 
     WHERE s1.billerid = '?' 
     AND s2.billerID != '?') AS s 
ON t.billerid = s.billerid AND t.subscription_id = s.old_subid 
SET t.subscription_id = s.new_subid 

DEMO

我想,我想出了一个适合您的最新评论一个简单的版本:

UPDATE transaction AS t 
JOIN subscription_id AS s1 
    ON s1.subscription_id = t.subscription_id 
     AND s1.billerid != t.billerid 
JOIN subscription_id AS s2 
    ON s1.memberid = s2.memberid 
     AND s2.subscription_id != s1.subscription_id 
     AND s2.billerid = t.billerid 
SET t.subscription_id = s2.subscription_id 

DEMO

+0

如何才能加入这里的Billerid工作?事务表中的subscription_id与订阅表中与不同成员有关的记录有关... – user3293836

+0

您的问题表明它基于相同的billerid,所以这就是我加入的内容。事务表中没有memberid,所以我没有看到如何在连接中使用它。 – Barmar

+0

@Barmar。 。 。也许你应该同时使用'subscription_id'和'billarid'。 –