mysql - SQL 为相似表创建新列名

标签 mysql create-table

我有一个名为 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/

相关文章:

grails - GRAILS将ID类型更改为 'int'后,我无法再创建对象

sql - 这些 SQL 语法有什么区别?

php - laravel 无法连接到 VM LAMP 上的 mysql 数据库

php - php 和 select mysql 之间的比较问题

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - 从具有外键约束的 Mysql 表中删除数据的脚本

mysql - `brew services start mysql` 和 `mysql.server start` 之间的区别

mysql - 如何在 MySQl 5.0 中将整数列添加到字符串列

mysql - 'unsigned int ..' 附近未知的 CREATE TABLE 语法错误

mysql - 编辑 mysql 表名以与一列的值组合(连接)