我有两个表,有一个相同的列名为user_name
,名为table_a
,table_b
。
我想,从table_b
,column_b_1
,column_b2
,分别复制到table_b1
,column_a_1
,column_a_2
,这里的user_name
是一样的,在SQL语句中怎么做?
发布于 2010-10-02 21:31:09
只要您有合适的索引,这应该可以很好地工作:
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中删除数据,并从临时中重新填充。
发布于 2017-12-11 20:38:31
从sqlite版本3.15开始,UPDATE的语法允许在SET部分中使用列名列表,因此查询可以写成
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
)
它不仅更短,而且更快
发布于 2016-07-30 08:30:12
有一个更好的解决方案,可以从一个表更新另一个表:
;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)
;
https://stackoverflow.com/questions/3845718
复制相似问题