T-Rex: Tabelle durch Value ansprechen

Moin Leute,

heute würde ich gerne eine Tabelle durch einen Value ansprechen.
In einer Tabelle (zuordnung) hab ich ua. folgende Information:

ID; TABELLENNAME
1; tabelle
2; dings
3; zeugs
4; wasanderes

Dann hab ich da einen normalen Select Query:
select * from tabelle;

Das würde ich jetzt gerne durch sowas ersetzen:
select * from (select TABELLENNAME from zuordnung where ID = 1);

Geht sowas?

Gruß
T-Rex

  1. Hi,

    Das würde ich jetzt gerne durch sowas ersetzen:
    select * from (select TABELLENNAME from zuordnung where ID = 1);

    Geht sowas?

    Nein. Du kannst aber dein Datenbankdesign entsprechend umstellen. Wenn die Tabellen tabelle, dings, zeugs, wasanderes alle die gleichen Spalten haben, kannst du diese in eine einzige zusammenführen und den bisherigen Tabellennamen als neue Spalte mitführen. Du kannst dann über die neue gesamte Tabelle suchen mit der Zusatzbedingung, dass die Tabellennamenspalte deinen gewünschtem Tabellennamen entspricht.

    Bis die Tage,
    Matti

  2. Hallo,

    heute würde ich gerne eine Tabelle durch einen Value ansprechen.
    In einer Tabelle (zuordnung) hab ich ua. folgende Information:

    ID; TABELLENNAME
    1; tabelle
    2; dings
    3; zeugs
    4; wasanderes

    Dann hab ich da einen normalen Select Query:
    select * from tabelle;

    das ist alles andere als "eine normale Abfrage". In normalen Abfragen ist * eher selten zu finden.

    Das würde ich jetzt gerne durch sowas ersetzen:
    select * from (select TABELLENNAME from zuordnung where ID = 1);

    Geht sowas?

    Diese Abfrage ist syntaktisch beinahe in Ordnung. Sie lieferte nur etwas anderes als Du erwartest. Um den Aliasnamen ergänzt und etwas lesbarer geschrieben, liefert folgendes Statement:

    SELECT  
        a.*  
    FROM (  
        SELECT             -- Großschreibung ist für SQL-Schlüsselwörter üblich  
            TABELLENNAME   -- für Spalten oder Tabellennamen jedoch nicht  
        FROM  
            zuordnung  
        WHERE  
            ID = 1  
    ) a;  
    
    

    bei Deinen Daten folgende Ergebnismenge:

    TABELLENNAME
    ------------
    tabelle

    Dein Vorhaben ist daher nicht in dieser Form und nicht in jedem Datenbankmanagementsystem umsetzbar. Aber es gibt welche, die das können, was Du zu brauchen glaubst. Ob Deines dazugehört, kann ich nicht beurteilen, weil Du nicht angegeben hast, welches Du (in welcher Version) verwendest.

    Ob das, was Du vor hast, eine gute Idee ist, ist wiederum eine andere Frage ...

    Freundliche Grüße

    Vinzenz

  3. Hi!

    select * from (select TABELLENNAME from zuordnung where ID = 1);
    Geht sowas?

    Ja, wenn du eine Lösung für MySQL suchst, aber sowas macht man doch nicht.

    Jedenfalls kann man einem PREPARE einen String übergeben, der das zusammengebaute Statement enthält.

    Lo!