2014-03-05 51 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'。 –