2014-04-28 18 views
0

使用下面的命令,我能夠得到create index命令綜合指數,創建一個使用CONCAT在MySQL

SELECT CONCAT (' 
create index ',index_name,' on ',table_schema,'.',table_name,' (',COLUMN_NAME,');' 
) FROM 
inf_schema.STATS WHERE 
table_schema='employee' AND 
table_name='FILESPROC' AND 
index_name NOT LIKE 'PRIMARY' ; 

我得到以下輸出:

create index FILENAMEPROCID on employee.FILESPROCESSED (PROCID); 
create index FILENAMEPROCID on employee.FILESPROCESSED (FILENAME); 
create index NENDDATEDataName on employee.FILESPROCESSED (DSN); 
create index NENDDATEDataName on employee.FILESPROCESSED (ENDDATE); 
create index NENDDATEDataName on employee.FILESPROCESSED (DataName); 
create index DSN on employee.FILESPROCESSED (DSN); 
create index ENDDATE on employee.FILESPROCESSED (ENDDATE); 

不過,我需要輸出以下列方式:

create index FILENAMEPROCID on employee.FILESPROCESSED (PROCID, FILENAME); 
create index NENDDATEDataName on employee.FILESPROCESSED (DSN, ENDDATE, DataName); 
create index DSN on employee.FILESPROCESSED (DSN); 
create index ENDDATE on employee.FILESPROCESSED (ENDDATE); 

這樣我就可以創建組合索引。我如何實現這一目標?

回答

1

使用GROUP_CONCAT對選定的COLUMN_NAME有相同的INDEX_NAME

SELECT 
     CONCAT (
      'create index ', index_name, ' on ', table_schema, '.', table_name, 
      ' (', GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '), ');' 
     ) indexes_scripts 
    FROM 
     inf_schema.STATS 
WHERE 
     table_schema='employee' 
    AND table_name='FILESPROC' 
    AND index_name NOT LIKE 'PRIMARY' 
GROUP BY index_name 
+0

這將所有列名組成一個'create index'命令。我需要的是,爲相同的索引名稱分組'create index',如果索引名稱不同,則爲每個索引名稱分別創建索引 – debal

+0

確定在查詢的末尾添加一個組解決了問題。謝謝你.. :) – debal

+0

是的。我錯過了那部分。包含並更正了小錯誤。 –