2012-08-05 278 views
0

我有一個在這裏查詢將返回不同軌道ID更新值從另一個表

注:我從另一個表查詢此。

SELECT t.track_id FROM tracks t , account_x_track axt,accounts a WHERE axt.track_id = t.track_id AND axt.account_id = a.id AND a.id = 2 

然後想我做的是所有的ID從上表將用於更新另一個表(具體曲目表),因爲這是從上表中檢索的ID從曲目來了表。我在想這樣的事情。

UPDATE tracks 
set visible = 3 
WHERE visible in(SELECT t.track_id FROM tracks t , account_x_track axt,accounts a WHERE axt.track_id = t.track_id AND axt.account_id = a.id AND a.id = 2) 

但它似乎並沒有工作。任何想法我將如何處理這個dillema? 還要注意,第一個查詢查詢許多人mnay表

回答

1

不能引用同一個表中的UPDATE在子查詢,使用JOIN來代替:

UPDATE tracks a 
JOIN (
     SELECT axt.track_id 
     FROM account_x_track axt 
     JOIN accounts a ON axt.account_id = a.id AND a.id = 2 
     ) b ON a.track_id = b.track_id 
SET a.visible = 3 
+0

這是工作,但可以請你在JOIN中解釋一切嗎? – user962206 2012-08-05 02:22:40

+0

@ user962206嘗試單獨運行子查詢查詢並查看它產生的結果。它只產生'account'' 2'包含的'track_id'。然後,我們將這個子選擇加入到'UPDATE'語句中的'tracks'表中,條件是id等於子選擇中派生的id,因此我們只更新帳號'2'包含的那些音軌。 – 2012-08-05 03:42:29