为了账号安全,请及时绑定邮箱和手机立即绑定

使用相同的用户名更新另一个表中的表值

使用相同的用户名更新另一个表中的表值

阿晨1998 2019-07-30 16:18:40
使用相同的用户名更新另一个表中的表值我有两个表,名称相同的列user_name,说table_a,table_b。我想,从复制table_b,column_b_1,column_b2,以table_b1,column_a_1,column_a_2,分别,这里的user_name是一样的,如何做到这一点的SQL语句?
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

只要你有适当的索引,这应该是正常的:

UPDATE table_aSET
      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子句,这使得它比其他RDBMS更多的工作。

如果性能不令人满意,另一个选项可能是使用select和table_a连接到table_a为临时表建立新行。然后从table_a中删除数据并从临时值中重新填充。


查看完整回答
反对 回复 2019-07-30
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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

UPDATE table_aSET
    (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   )

这不仅更短,而且更快


查看完整回答
反对 回复 2019-07-30
?
万千封印

TA贡献1891条经验 获得超3个赞

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

;WITH a AS(
    SELECT
        song_id,
        artist_id    FROM
        online_performance)UPDATE record_performanceSET
    op_song_id=(SELECT song_id FROM a),
    op_artist_id=(SELECT artist_id FROM a);


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 629 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信