如何在SQLite中合并两列?

vhipe2zx  于 2022-11-30  发布在  SQLite
关注(0)|答案(3)|浏览(479)

什么命令可以将column1和column2相对于内容进行合并,然后删除column2?另外,如果两列都包含内容,请考虑将column1的内容作为第一选择。这是关于SQLite的。请注意,这些是对数据库和列布局的永久更改,而不是SELECT的JOIN。
输入SQLite数据库:

|column1 | column2 |column_a|
|========|=========|========|
|"test"  |         |1       |
|"test2" |"test3"  |2       |
|        |"xxx"    |3       |

伪代码:
列1 =列1+列2列2.删除()
下一个SQLite:

|column1 |column_a|
|========|========|
|"test"  |1       |
|"test2" |2       |
|"xxx"   |3       |
nhaq1z21

nhaq1z211#

这种类型的工作需要在几个步骤中完成。
1.使用来自@Tim Biegeleisen的查询创建一个新表。例如tab_dev(为了安全起见,应该先使用CREATE TABLE,然后使用INSERT INTO,以确保列类型、约束条件......等都是按照规范创建的)。

create table tab_dev
as
select COALESCE(column1, column2) as column1,
       columna
  from tab_prod;

此时,您应该有旧版本tab_prod和新版本tab_dev。在继续下一步之前,请根据旧表仔细检查新表。
1.首先将旧表重命名为某个备份表(此时不要删除它)。

alter table tab_prod rename to tab_prod_backup;

1.现在旧版本表的名称可用,因此将新版本tab_dev重命名为tab_prod

alter table tab_dev rename to tab_prod;

1.如果一切按计划进行,请仔细检查和验证tab_prod中的数据。根据需要删除备份表tab_prod_backup

ruarlubt

ruarlubt2#

我们可以在这里使用COALESCE()

SELECT COALESCE(column1, column2) AS column1,
       column_a
FROM yourTable;
2guxujil

2guxujil3#

假设表名为myTable。下面是您的问题的DDL:

DROP TABLE IF EXISTS myTable;
CREATE TABLE IF NOT EXISTS myTable(column1, column2, column_a);
INSERT INTO myTable VALUES("test", null, 1);
INSERT INTO myTable VALUES("test2", "test3", 2);
INSERT INTO myTable VALUES(null, "xxx", 3);

假设问题是关于UPDATE,后面跟着SELECT。看起来我们希望将column2复制到column1中,以便只填充NULL的值。非NULL值可以保持原样。那么,随后的SELECT语句似乎只对column1column_a感兴趣,因此我们可以从SELECT

UPDATE myTable
SET column1 = column2
WHERE column1 IS NULL;

SELECT column1, column_a
FROM myTable;

上面的一些假设可能不正确。例如,问题可能是不允许源表使用UPDATE。对于它,所需的SELECT语句将更加复杂。然后是SQLite版本问题,因为不同的版本具有不同的功能,如IFF。此外,不清楚是否需要删除column2。为此,需要使用SQLite的更高版本来修改现有表,否则,我们必须删除column2,重新创建表。

相关问题