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

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

我有两个表,名称相同的列user_name,说table_atable_b

我想,从复制table_bcolumn_b_1column_b2,以table_b1column_a_1column_a_2,分别,这里的user_name是一样的,如何做到这一点的SQL语句?


阿晨1998
浏览 631回答 3
3回答

慕田峪7331174

只要你有适当的索引,这应该是正常的: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中删除数据并从临时值中重新填充。

扬帆大鱼

从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   )这不仅更短,而且更快

万千封印

从另一个表更新一个表有一个更好的解决方案:;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);
打开App,查看更多内容
随时随地看视频慕课网APP