从另一个表更新一个表中的值

Posted

技术标签:

【中文标题】从另一个表更新一个表中的值【英文标题】:Updating Values in one table from another table 【发布时间】:2012-08-02 13:08:36 【问题描述】:

我在这里有一个查询,它将返回不同的轨道 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 将用于更新另一个表(特别是 Tracks 表),因为从前一个表中检索的 id 来自 Tracks 表。我在想这样的事情。

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 )

但它似乎不起作用。任何想法我将如何处理这个困境? 另请注意,第一个查询查询多到多张表

【问题讨论】:

【参考方案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

【讨论】:

@user962206 尝试自己运行 subselect 查询,看看它会产生什么。它只生成account 2 包含的track_id。然后我们将这个子选择加入到UPDATE 语句中的tracks 表中,条件是id 等于子选择中派生的id,因此我们只更新帐户2 包含的那些轨道。

以上是关于从另一个表更新一个表中的值的主要内容,如果未能解决你的问题,请参考以下文章

用单个列从另一个表更新一个表中的多个列?

Spark 从另一个表更新 Delta 中的多个列

如何根据从另一个表中选择的结果更新一个表中的列

MySQL:从另一个表中的值“修补”表上的现有数据

sql [sql]如何从另一个表中的相应数据更新一个表中的数据

SQL 从另一个表中的另一列更新一列