Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将字符串列拆分为行并删除原始行-postgres_Postgresql - Fatal编程技术网

Postgresql 将字符串列拆分为行并删除原始行-postgres

Postgresql 将字符串列拆分为行并删除原始行-postgres,postgresql,Postgresql,我是postgresql的业余爱好者,我希望将逗号分隔的列拆分为许多列。我使用此代码成功地将列拆分为行,并根据分隔字符串的数量插入新行 INSERT INTO myTable (username, town) SELECT username, regexp_split_to_table(town, E',') FROM myTable; 现在我想要实现的是,从数据库中删除原始列。如有任何建议,将不胜感激 显示了我到目前为止所做的一切 显而易见的方法是简单地删除那些包含的行

我是postgresql的业余爱好者,我希望将逗号分隔的列拆分为许多列。我使用此代码成功地将列拆分为行,并根据分隔字符串的数量插入新行

INSERT INTO myTable (username, town)
SELECT 
    username, 
    regexp_split_to_table(town, E',') 
FROM myTable;
现在我想要实现的是,从数据库中删除原始列。如有任何建议,将不胜感激


显示了我到目前为止所做的一切

显而易见的方法是简单地删除那些包含
的行。新行不能包含分隔符,因为它不会由
regexp\u split\u to\u table()返回

假设表中有一个(生成的)主键(例如名为
id
),另一个选项是使用



你的SQL小提琴和你的问题是不一致的。小提琴使用
,但你的问题使用
作为分隔符。我用了
为了与您的问题保持一致

显而易见的方法是删除包含
的行。新行不能包含分隔符,因为它不会由
regexp\u split\u to\u table()返回

假设表中有一个(生成的)主键(例如名为
id
),另一个选项是使用


你的SQL小提琴和你的问题是不一致的。小提琴使用
,但你的问题使用
作为分隔符。我用了
为了与您的问题保持一致

您可以简单地标记“旧记录”,然后删除它们并删除所有标记,如下所示:

ALTER TABLE yourTable ADD COLUMN new BOOLEAN DEFAULT false;
INSERT INTO yourTable (username, town, new)
SELECT 
    username, 
    regexp_split_to_table(town, E','),
    true
FROM yourTable;

DELETE FROM yourTable WHERE new = false;

ALTER TABLE yourTable DROP COLUMN new;
您可以简单地标记“旧记录”,然后删除它们并删除所有标记,如下所示:

ALTER TABLE yourTable ADD COLUMN new BOOLEAN DEFAULT false;
INSERT INTO yourTable (username, town, new)
SELECT 
    username, 
    regexp_split_to_table(town, E','),
    true
FROM yourTable;

DELETE FROM yourTable WHERE new = false;

ALTER TABLE yourTable DROP COLUMN new;

表中没有主键吗?@a_horse_,没有名字哦,它只是一把小提琴。但我真的不知道。真的有必要吗?那会有帮助吗?怎么做呢?这将有助于以后删除那些不需要的行。@a_horse_,没有名字啊哈!到底是怎么回事?对不起,我是这个领域的新手。:)表中没有主键吗?@a_horse_,没有名字哦,它只是一把小提琴。但我真的不知道。真的有必要吗?那会有帮助吗?怎么做呢?这将有助于以后删除那些不需要的行。@a_horse_,没有名字啊哈!到底是怎么回事?对不起,我是这个领域的新手。:)谢谢你抽出时间。我真的很感谢你的帮助。我不熟悉“with”语法,应该学习它,但它帮助我解决了这个问题。谢谢,谢谢你抽出时间。我真的很感谢你的帮助。我不熟悉“with”语法,应该学习它,但它帮助我解决了这个问题。谢谢,谢谢你抽出时间。这真的很有帮助!这比使用
的解决方案更容易理解,谢谢您抽出时间。这真的很有帮助!这比使用

ALTER TABLE yourTable ADD COLUMN new BOOLEAN DEFAULT false;
INSERT INTO yourTable (username, town, new)
SELECT 
    username, 
    regexp_split_to_table(town, E','),
    true
FROM yourTable;

DELETE FROM yourTable WHERE new = false;

ALTER TABLE yourTable DROP COLUMN new;