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