PostgreSQL:如何克隆user_id=1的行并将其user_id替换为3
解决方案
你可以通过INSERT ... SELECT语句快速实现需求——筛选出user_id=1的行,将新行的user_id替换为3,同时保留其他所有列的原始数据。
明确列名的稳妥写法
如果清楚表的所有列名,建议明确列出所有列,避免后续表结构变动时出错:
INSERT INTO 你的数据表名 (user_id, product_id, 列名1, 列名2, ...) SELECT 3 AS user_id, product_id, 列名1, 列名2, ... FROM 你的数据表名 WHERE user_id = 1;
多列场景的简化写法(分数据库)
如果表中列很多,部分数据库支持排除指定列的语法:
- PostgreSQL:
INSERT INTO 你的数据表名 SELECT 3 AS user_id, (t).* EXCEPT (user_id) FROM 你的数据表名 t WHERE user_id = 1;
- MySQL:由于MySQL不支持直接排除列,仍需手动列出所有非
user_id的列。
执行上述语句后,表中就会新增user_id=3的对应行,与你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者xaxa
相关产品推荐
相关产品推荐

