2017-04-26 88 views
0

这是一个语法问题,我不知道我在想什么是可能的。我找不到任何关于它的事情。将自动增量主键添加到使用SELECT语句创建的表格

CREATE TABLE IF NOT EXISTS newTable 
SELECT something1, something2, something3 FROM someTable; 

使用这种语法来创建一个新表,我可以添加一个主键?这样的事情:

CREATE TABLE IF NOT EXISTS newTable 
SELECT id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, something1, something2, something3 FROM someTable; 

我有一个大而复杂的动态查询,返回我需要的确切结果。剩下的就是将这些结果添加到自动增量主键中! 由于查询是动态的,我不知道我会得到的列数,所以我不能只是:

DROP TABLE IF EXISTS newTable; 
CREATE TABLE newTable(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    something1 VARCHAR(255), 
    something2 VARCHAR(255), 
    something3 VARCHAR(255) 
) ENGINE=MEMORY; 

预先感谢任何建议!

回答

0

看起来你必须运行多个步骤来做到这一点:

  • 创建一个主键
  • 表添加使用存储过程中的列此表(可与第1步合并)

为此,您使用信息模式。这将看起来如下(虚拟代码,没有mysql方便调试任何东西):

CREATE PROCEDURE create_table(table_name VARCHAR(200)) 
BEGIN 
    declare cursor table_columns as SELECT COLUMN_NAME, DATA_TYPE, 
    IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'table_name' 
    LOOP 
    concatenate create table statement 
    END LOOP; 
    execute create table statement 

END 
相关问题