首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从另一个具有相同用户名的表中更新表值

从另一个具有相同用户名的表中更新表值
EN

Stack Overflow用户
提问于 2010-10-02 20:34:17
回答 5查看 89K关注 0票数 79

我有两个表,有一个相同的列名为user_name,名为table_atable_b

我想,从table_bcolumn_b_1column_b2,分别复制到table_b1column_a_1column_a_2,这里的user_name是一样的,在SQL语句中怎么做?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-02 21:31:09

只要您有合适的索引,这应该可以很好地工作:

代码语言:javascript
复制
UPDATE table_a
SET
      column_a_1 = (SELECT table_b.column_b_1 
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
    , column_a_2 = (SELECT table_b.column_b_2
                            FROM table_b
                            WHERE table_b.user_name = table_a.user_name )
WHERE
    EXISTS (
        SELECT *
        FROM table_b
        WHERE table_b.user_name = table_a.user_name
    )

sqlite3中的UPDATE不支持FROM子句,这使得它比其他关系数据库中的工作稍微多一点。

如果性能不能令人满意,另一个选择可能是使用select和join with table_a在临时表中为table_a构建新行。然后从table_a中删除数据,并从临时中重新填充。

票数 138
EN

Stack Overflow用户

发布于 2017-12-11 20:38:31

从sqlite版本3.15开始,UPDATE的语法允许在SET部分中使用列名列表,因此查询可以写成

代码语言:javascript
复制
UPDATE table_a
SET
    (column_a_1, column_a_2) = (SELECT table_b.column_b_1, table_b.column_b_2
                                FROM table_b
                                WHERE table_b.user_name = table_a.user_name )
WHERE
    EXISTS (
       SELECT *
       FROM table_b
       WHERE table_b.user_name = table_a.user_name
   )

它不仅更短,而且更快

票数 27
EN

Stack Overflow用户

发布于 2016-07-30 08:30:12

有一个更好的解决方案,可以从一个表更新另一个表:

代码语言:javascript
复制
;WITH a AS
(
    SELECT
        song_id,
        artist_id
    FROM
        online_performance
)
UPDATE record_performance
SET
    op_song_id=(SELECT song_id FROM a),
    op_artist_id=(SELECT artist_id FROM a)

;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3845718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档