我有两个表,同一列名为user_name,表示table_a,table_b.
我想,从table_b,column_b_1,column_b2,分别复制到table_b1,column_a_1,column_a_2,其中user_name是相同的,如何在sql语句中做到这一点?
mar*_*ton 121
只要你有适当的索引,这应该是正常的:
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
)
Run Code Online (Sandbox Code Playgroud)
sqlite3中的UPDATE 不支持FROM子句,这使得它比其他RDBMS更多的工作.
如果性能不令人满意,另一个选项可能是使用select和table_a连接到table_a为临时表建立新行.然后从table_a中删除数据并从临时值中重新填充.
Ale*_*der 15
从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
)
Run Code Online (Sandbox Code Playgroud)
这不仅更短,而且更快
可以使用UPDATE FROM语法来实现:
UPDATE table_a
SET column_a_1 = table_b.column_b_1
,column_a_2 = table_b.column_b_2
FROM table_b
WHERE table_b.user_name = table_a.user_name;
Run Code Online (Sandbox Code Playgroud)
或者:
UPDATE table_a
SET (column_a_1, column_a_2) = (table_b.column_b_1, table_b.column_b_2)
FROM table_b
WHERE table_b.user_name = table_a.user_name;
Run Code Online (Sandbox Code Playgroud)
UPDATE-FROM 思想是 SQL 的扩展,它允许 UPDATE 语句由数据库中的其他表驱动。“目标”表是正在更新的特定表。使用 UPDATE-FROM 您可以将目标表与数据库中的其他表连接起来,以帮助计算哪些行需要更新以及这些行上应该有哪些新值
| 归档时间: |
|
| 查看次数: |
71111 次 |
| 最近记录: |