2015-02-10 113 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

相關問題