如何在SQLite中合并两列并永久删除指定列(优先保留首列内容)
在SQLite中合并两列并永久删除指定列的操作方法
要实现优先保留column1内容,无内容时用column2填充,之后永久删除column2的需求,需要分两步操作:先更新column1的数据,再修改表结构删除column2。
操作步骤(SQLite 3.35.0及以上版本)
SQLite 3.35.0开始支持直接删除列,操作更简洁:
1. 更新column1的值,合并两列内容
使用COALESCE()函数,该函数会返回传入参数中第一个非空的值,正好满足"优先保留column1"的需求:
UPDATE 你的表名 SET column1 = COALESCE(column1, column2);
针对你的示例数据:
- 第一行column1有值
"test",直接保留; - 第二行column1有值
"test2",忽略column2的"test3"; - 第三行column1为空,用column2的
"xxx"填充。
2. 永久删除column2列
执行ALTER TABLE语句删除列:
ALTER TABLE 你的表名 DROP COLUMN column2;
执行完以上两步后,表结构和数据就会变成你期望的结果:
|column1 |column_a| |========|========| |"test" |1 | |"test2" |2 | |"xxx" |3 |
兼容旧版本SQLite(低于3.35.0)
旧版SQLite不支持直接DROP COLUMN,需要通过重建表的方式实现:
- 创建包含目标列的新表:
CREATE TABLE new_你的表名 ( column1 TEXT, column_a INTEGER );
- 将原表数据处理后插入新表:
INSERT INTO new_你的表名 (column1, column_a) SELECT COALESCE(column1, column2), column_a FROM 你的表名;
- 删除原表并将新表重命名为原表名:
DROP TABLE 你的表名; ALTER TABLE new_你的表名 RENAME TO 你的表名;
内容的提问来源于stack exchange,提问作者ImLearning
相关产品推荐
相关产品推荐

