Jeg tror, jeg forstår, at du vil vælge en kolonne efter navn, og navnene er strenge i din TABLE_MASTER.
Du kan ikke gøre dette i en enkelt SQL-forespørgsel, fordi SQL ikke kan vælge en kolonne ved at bruge et strengudtryk. Der er forskel på en streng og en identifikator. For eksempel vælger dette data fra en kolonne efter identifikator:
SELECT header01 ...
Men det følgende er et strengudtryk (et simpelt, som kun er en konstant værdi). Det returnerer kun en fast streng 'header01', IKKE dataene fra en kolonne med det navn:
SELECT 'header01' ...
Ligeledes vælger brug af ethvert andet udtryk i en valgliste kun værdien af det udtryk, IKKE dataene, der er gemt i en kolonne navngivet af udtrykkets strengværdi.
Derfor, hvis du ønsker, at en forespørgsel skal returnere en dynamisk kolonne, der er navngivet af en anden variabel eller et andet udtryk, kan du ikke gøre det i den samme forespørgsel, hvor du læste det udtryk. Du skal formatere en ny SQL-forespørgsel ud fra de værdier, du læser. Dette kaldes en dynamisk SQL-sætning (allerede nævnt af spencer7593, som postede et svar, mens jeg skrev mit eget svar).
Du kan bruge din TABLE_MASTER til at formatere en dynamisk SQL-sætning for at hente kolonner og omdefinere deres alias:
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(CONCAT(ORIGIN, ' AS ', TARGET)), ', ',
QUOTE(MAX(NAME)), ' AS NAME ',
'FROM TABLE_EXAMPLE'
) INTO @sql
FROM TABLE_MASTER;
Resultatet af dette er en streng, der danner en anden SELECT-sætning, denne omdøber kolonnerne, som du vil:
SELECT header01 AS header_master01,header02 AS header_master02, 'Paul' AS NAME FROM TABLE_EXAMPLE
Så kan du bruge strengen gemt i @sql
som en dynamisk SQL-forespørgsel.
Her er proceduren, der gør dette:
DELIMITER ;;
CREATE PROCEDURE MyProc()
BEGIN
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(CONCAT(ORIGIN, ' AS ', TARGET)), ', ',
QUOTE(MAX(NAME)), ' AS NAME ',
'FROM TABLE_EXAMPLE'
) INTO @sql
FROM TABLE_MASTER;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
DELIMITER ;
Ring til proceduren og få resultatet:
CALL MyProc();
+-----------------+-----------------+------+
| header_master01 | header_master02 | NAME |
+-----------------+-----------------+------+
| data01 | data02 | Paul |
| data11 | data12 | Paul |
+-----------------+-----------------+------+
Jeg må sige, at det er en masse besvær at gå igennem. Jeg vil hellere hente dataene, som de er i databasen, og omformatere dem i min applikationskode. Så skulle jeg ikke bruge nogen dynamisk SQL til at formatere kolonnerne.