2013-04-04 14 views
7

Załóżmy, że mam poniższej tabeli z jednej kolumnie:Utwórz tabelę z nazwami kolumn pochodzących z wartościami rzędu innej tabeli

Table_1

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

I chcę utworzyć nową tabelę z następującymi nazwy kolumna:

Table_2

| pk | A | B | C | 

Oznacza to, że dane z jednej t stanie się nazwami kolumn drugiej tabeli. Na pewnym poziomie może występować pivot, ale nie jestem w stanie uzyskać odpowiedzi.

Próbowałem:

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

Odpowiedz

3

Można użyć dynamicznego zapytania:

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; 

proszę zobaczyć skrzypce here.

+1

Dziękuję bardzo za odpowiedź. Próbowałem powyższego zapytania. Jednak ciąg kwerendy wewnątrz mojej zmiennej @sql jest bardzo długi (ponieważ istnieje duża liczba kolumn). Powoduje to problemy w linii "PREPARE stmt". Wydaje się, że wykreśla większość ciągu zapytania poza punkt, a niekompletny łańcuch prowadzi do błędu składni. –

+1

@AlptiginJalayr Myślę, że problem dotyczy funkcji GROUP_CONCAT, jej maksymalna długość jest ograniczona, ale można zwiększyć ten limit za pomocą, na przykład, 'SET SESSION group_concat_max_len = 1000000;' – fthiella

+0

Próbowałem tego. Jednak to nie jest błąd group_concat, ale PREPARE stmt Z [at] sql zapytania. Wiem o tym, ponieważ wykonałem SELECT [at] sql before PREPARE i zwróciłem kompletne zapytanie. –

Powiązane problemy