2017-07-04 9 views
1

許可されていない私は、テーブルtestnew持っている:スペースはMySQLのカラム名

+---------------------+ 
    | v_id | name   | 
    +---------------------+ 
    | 1 | Productivity | 
    | 2 | Work Quality | 
    | 3 | Knowldge  | 
    | 4 | Comm know | 
    +------+--------------+ 

管理者によって追加されたと私は別のテーブルを作成するつもりです(期待)を

+---------------+--------------+------------+----------+ 
    | Productivity |Work Quality | Knowldge |Comm know | 
    +------------+-----------------+------------------------ 
    |              | 
    |              | 
    |              | 
    |              | 
    +------------+-----------------------------------------+ 

問合せ:

SELECT 
    CONCAT(
    'CREATE TABLE new (', 
    GROUP_CONCAT(DISTINCT 
     CONCAT(name, ' VARCHAR(50)') 
     SEPARATOR ','), 
    ');') 
FROM 
    testnew 
INTO @sql; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

Work QualityComm knowにはスペースがあるため、出力が得られません。

これを修正するにはどうすればよいですか?

+0

INSERT INTO ... SELECT? - このようにGROUP_CONCATを使用しても、奇数である – Strawberry

答えて

2

私は、列名に特殊文字を入れることに反対しました。注意点として

SELECT CONCAT('CREATE TABLE new (', 
       GROUP_CONCAT(DISTINCT CONCAT('`', name, '` VARCHAR(50)') 
          SEPARATOR ','), 
       ');') 
     FROM testnew 
INTO @sql; 

:あなたは、MySQLのエスケープ文字(バッククォート)または二重引用符を使用する必要がある場合でも、GROUP_CONCAT()CONCAT()は冗長です。ほとんど知られていない事実は、が複数の引数をとります:

SELECT CONCAT('CREATE TABLE new (', 
       GROUP_CONCAT(DISTINCT '`', name, '` VARCHAR(50)' 
          SEPARATOR ','), 
       ');') 
     FROM testnew 
INTO @sql; 
+0

- たくさんありがとう –

関連する問題