2013-04-04 11 views
7

varsayalım aşağıdaki tek bir sütuna sahip tablo vardır:başka tablonun satır değerlerinden türetilmiş sütun adlarını içeren bir tablo oluşturun

table_1

----------- 
| nameCol | 
----------- 
| A  | 
| A  | 
| B  | 
| C  | 
----------- 

Ve aşağıdaki ile yeni bir tablo oluşturmak istiyorum sütun isimleri:

table_2

| pk | A | B | C | 

olan, bir t verileri ikinci tablonun sütun isimleri olabilir. Bazı düzeylerde bir pivot olabilir, ancak cevabı gerçekten alamıyorum.

Denedim:

create table Table_2 (
    select group_concat(distinct(nameCol), " varchar(50), ") 
    from Table_1 
); 

cevap

3

Bir dinamik sorgu kullanabilirsiniz:

SELECT 
    CONCAT(
    'CREATE TABLE Table_2 (', 
    GROUP_CONCAT(DISTINCT 
     CONCAT(nameCol, ' VARCHAR(50)') 
     SEPARATOR ','), 
    ');') 
FROM 
    Table_1 
INTO @sql; 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

keman here bakınız.

+1

Cevabınız için çok teşekkür ederim. Yukarıdaki sorguyu denedim. Ancak, @sql değişkeni içindeki sorgu dizesi çok uzun (çok sayıda sütun olduğu için) çok uzun. Bu "PREPARE stmt" satırında sorunlara neden oluyor. Sorgu dizgisinin çoğunun bir noktanın ötesine çıkarılması gibi görünüyor ve eksik dizge bir yazım hatası veriyor. –

+1

@AlptiginJalayr Sorunun GROUP_CONCAT işlevinde olduğunu düşünüyorum, maksimum uzunluğu sınırlıdır, ancak bu sınırı artırabilirsiniz, örneğin, 'SET SESSION group_concat_max_len = 1000000; – fthiella

+0

Bunu denedim. Ancak, yanlış giden group_concat değil, ama PREPARE stmt FROM [at] sql sorgusu. Bunu biliyorum çünkü HAZIRLIK önce SELECT [at] 'ı yaptım ve tam sorguyu verdi. –

İlgili konular