nomos: MySQL: Dynamischer Spaltenname in SubSelect

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

  1. 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

    1. 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

      1. 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