MySQL: Dynamischer Spaltenname in SubSelect
nomos
- datenbank
0 Vinzenz Mai0 nomos
Hi,
ich habe folgende Abfrage
SELECT t1.id, t1.name, @col_name := CONCAT('col_', t1.id),
(SELECT @col_name FROM tb2 AS t2
WHERE t2.id = t1.id) AS 'value'
FROM tb1 AS t1
Das Bedeutet, ich habe zwei Tabellen - in der ersten werden Formularbezeichnungen abgelegt und in der zweiten die entsprechenden Werte abgespeichert. Die Selects sind hier nur abgespeckte Versionen.
Meine Frage:
im Subselect wird die Variable @col_name als normaler String behandelt und nicht als Spaltenname, so dass als value immer was wie col_1, col_2 usw. rauskommt. Wie kann ich dem Subselect beibringen, dass @col_name eine Spaltenbezeichnung ist???
Dank & Gruss
nomos
Hallo
ich habe folgende Abfrage
SELECT t1.id, t1.name, @col_name := CONCAT('col_', t1.id),
(SELECT @col_name FROM tb2 AS t2
WHERE t2.id = t1.id) AS 'value'
FROM tb1 AS t1
im Subselect wird die Variable @col_name als normaler String behandelt und nicht als Spaltenname, so dass als value immer was wie col_1, col_2 usw. rauskommt. Wie kann ich dem Subselect beibringen, dass @col_name eine Spaltenbezeichnung ist???
Einfach: so gar nicht.
Überlege bitte: Für jeden Wert von t1.id hast Du einen anderen Spaltennamen.
Du möchtest somit im Subselect ein UNION über entsprechend viele Abfragen machen. Inwieweit Du in einer Stored Routine (Function/Procedure) Dir (über einen Cursor) dynamisch dieses Statement zusammenbauen kannst, das kann ich für MySQL nicht beurteilen. Stored Procedures in MySQL sind aufgrund der däml^w eigenartigen MySQL-SQL-Syntax sperrig. In T-SQL ginge das.
Freundliche Grüße
Vinzenz
Einfach: so gar nicht.
Hi,
hmmm schwirig zu beschreiben - "zu Fuß" geht die Sache prima...
anders gefragt, kann ich MySQL dazu bringen eine MySQL-Variable als Spaltenname anzusehen?
wie wäre es mit
SET @col_name = "col_1";
SELECT @col_name FROM tbl WHERE id = 5;
??
Gruss nomos
Hallo
anders gefragt, kann ich MySQL dazu bringen eine MySQL-Variable als Spaltenname anzusehen?
so nicht, das ist immer noch eine konstante Zeichenkette, die Du da hast, kein Spaltenname.
SET @col_name = "col_1";
SELECT @col_name FROM tbl WHERE id = 5;
Schau' mal in die MySQL-Doku, ob die zum dynamischen Zusammenbauen von SQL-Statements und deren anschließende Ausführung was bietet.
Freundliche Grüße
Vinzenz