2012-08-05 140 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