我有一个名为 Person 的表,其中每一列都以字母“Person”作为前缀;即 PersonLastName、PersonAddress1、PersonCity 等。我希望创建一个与 Person 结构相同但列名前缀不同的新表,例如 XxxLastName、XxxAddress1、XxxCity。如果我使用
Create Table Like Person
我将获得正确的结构,但原始列名称来自 Person。当然,我可以重命名所有列,但这是一项乏味的工作。有没有办法创建像 Person 这样的表,并同时根据某种规则重命名列?
最佳答案
我认为你不能随意这样做。您可以在如下所示的 1 个语句中完成此操作,但我不知道这是否比在简单的 CREATE TABLE LIKE 查询后进行更改更好。
You could do:
CREATE TABLE Dog AS
(SELECT PersonFirstName AS DogFirstName, PersonLastName AS DogLastName FROM Person);
另一种方法(显然)是用 SQL 之外的另一种语言编写脚本。
您可以做的另一件事是从表中删除现有的列名称
SELECT @colname := `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='YOURDATABASE' AND `TABLE_NAME`='YOURTABLE' limit 0, 1;
然后使用 mysql substring() 截掉前缀。
set @chopped = substring(@colname, ....)
然后将另一个 mysql 变量设置为新前缀。
set @newprefix = ''
然后运行 CREATE TABLE AS 查询并连接变量(新前缀 + 简短的列名称)。这很快就会变得复杂。
我认为从其他人的评论来看,很明显你不应该尝试在 mysql 中自动执行此操作。最好使用可以更轻松地运行逻辑的脚本来完成。
关于mysql - SQL 为相似表创建新列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512813/