2015-02-10 115 views
0

我期待一个新列添加到使用提供herehereALTER TABLE ADD COLUMN和自动列列表中

本质的建议表,我想(fields_in_orig_table)将自动填充,并不必手动输入(有许多列和表,这会更改表):

CREATE TABLE games_new LIKE games_orig; 
ALTER TABLE games_new ADD COLUMN location varchar(256); 
INSERT INTO games_new (fields_in_orig_table) SELECT * FROM games_orig; 
RENAME TABLE games_orig TO games_old, games_new TO games_orig; 
DROP TABLE games_old; 

我的想法去解决此问题:

CREATE TABLE games_new LIKE games_orig; 
ALTER TABLE games_new ADD COLUMN version varchar(256); 
INSERT INTO games_new 

      (SELECT CONCAT(GROUP_CONCAT(column_name ORDER BY ordinal_position 
      SEPARATOR " , "), " ") AS columns 
      FROM information_schema.columns 
      WHERE table_schema = 'games' AND table_name = 'games_orig') 

SELECT * FROM games_orig; 
RENAME TABLE games_orig TO games_old, games_new TO games_orig; 
DROP TABLE games_old; 

这给我语法错误(靠近Select concat ....)。

原来的语法来获得逗号分隔的列清单是:

SELECT CONCAT("'", GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR "', '"), "'") AS columns 
FROM information_schema.columns 
WHERE table_schema = 'db_name' AND table_name = 'tbl_name' 

在我的询问,我已经删除了额外的引号,因为我认为我的查询不需要引号作为列上市的一部分。

我在这里做错了什么?谁可以帮忙?

+0

如果您设置了SQL小提琴,它可能会更容易帮助我们 – cameronjonesweb 2015-02-10 07:14:45

+0

将很快做... – Stan 2015-02-10 07:22:20

+0

创建SQL小提琴:http://www.sqlfiddle.com/#! 2/b7a76e/3 – Stan 2015-02-10 07:54:38

回答

0
INSERT INTO games_new 

VALUES (SELECT CONCAT.... 
+0

感谢您的快速响应,仍然获得sa我错误1064.你的SQL语法有错误; (SELECT CONCAT(GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR“,'.....) – Stan 2015-02-10 07:02:40

+0

@Stan查看已更新的答案 – cameronjonesweb 2015-02-10 07:04:56

+0

谢谢,没有运气,但是,请检查与您的MySQL服务器版本对应的手册...仍然是相同的错误... – Stan 2015-02-10 07:12:31

0

当在表中插入值使用INSERT INTO tablename VALUES (fields)代替INSERT INTO tablename SET(fields)

CREATE TABLE games_new LIKE games_orig; 
ALTER TABLE games_new ADD COLUMN version varchar(256); 
INSERT INTO games_new 
      VALUES 
      (SELECT CONCAT(GROUP_CONCAT(column_name ORDER BY ordinal_position 
      SEPARATOR ' , '), ' ') AS columns 
      FROM information_schema.columns 
      WHERE table_schema = 'games' AND table_name = 'games_orig') 

SELECT * FROM games_orig; 
RENAME TABLE games_orig TO games_old, games_new TO games_orig; 
DROP TABLE games_old; 
+0

谢谢,Rigel,仍然在努力处理相同的错误信息... – Stan 2015-02-10 07:12:53

+0

而不是双qoute,尝试使用单引号只看到我编辑的答案 – Rigel1121 2015-02-10 07:15:56

+0

仍然相同..让我设置创建一个SQL小提琴... – Stan 2015-02-10 07:23:41

0

您还没有指定你想要的列插入,因为你的嵌套查询只返回1个值

INSERT INTO games_new (column_name_u_want_to_insert_value_into) 
SELECT cast(concat(group_concat(column_name ORDER BY ordinal_position SEPARATOR " , "), " ") AS CHAR) AS columns 
FROM  information_schema.columns 
WHERE table_name = 'games_orig'; 

此外,如果你正在运行的所有语句一起,加上分号( ;)插入查询以及

+0

谢谢,Sachin。将立即尝试... – Stan 2015-02-10 07:26:37

+0

创建SQL小提琴:http:/ /www.sqlfiddle.com/#!2/b7a76e/3 – Stan 2015-02-10 07:54:58

+0

是我创建的小提琴吗? – Stan 2015-02-10 10:32:42

相关问题