簡體   English   中英

ALTER TABLE ADD COLUMN和自動列列表

[英]ALTER TABLE ADD COLUMN and automatic COLUMNS list

我正在尋找使用此處此處提供的建議表中添加新列

本質上,我希望自動填充(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'

在查詢中,我刪除了多余的引號,因為我認為查詢不需要引號作為列列表的一部分。

我在這做錯了什么? 請問誰能幫忙?

INSERT INTO  games_new 

VALUES (SELECT CONCAT....

在表中插入值時,請使用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;

您尚未指定要插入的列,因為嵌套查詢僅返回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';

另外,如果同時運行所有語句,請為插入查詢添加分號(;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM