Blackwane: SQL Abfrage mit Spaltennamen?!

Hi,

ich habe folgendes vor, wenn das überhaupt möglich ist.

Beispiel: Ich habe 4 Tabellen...

1. Tabelle: (Werkstatt)

ID | Name |
1  | BMW  |
2  | Audi |
3  | Golf |

Für jeden Spaltennamen (BMW, Audi, Golf) gibt es eine extra Tabelle, mit den gleichen Namen!
Also:

2. Tabelle (BMW)
3. Tabelle (Audi)
4. Tabelle (Golf)

Jetzt möchte ich Tabelle 1: Werkstatt Abfragen und zu jedem Spaltennamen auch die Tabellen (BMW, Audi, Golf), so das ich alle Datensätze in einer Abfrage habe.

Ja, ich weiß mit (Join, Union etc.)

Das ganze soll aber automatisch passieren. MYSQL soll selbst erkennen, wieviele und welche Tabelle noch mit ausgelesen werden sollen, also eine art If-Abfrage in MYSQL.
So das ich nicht jede Tabelle extra mit (Joins, Union etc.) in der Abfrage anlegen muss.

Ich hoffe ihr versteht wie ich das meine :)

MfG
Blackwane

  1. Tach!

    Für jeden Spaltennamen (BMW, Audi, Golf) gibt es eine extra Tabelle, mit den gleichen Namen!

    Ohne deinen Grund dafür zu kennen, normalerweise ist das schlechtes Datenbankdesign. Wenn es gleichartige Daten sind, gehören die nach der reinen Lehre der Normalisierung in dieselbe Tabelle.

    Jetzt möchte ich Tabelle 1: Werkstatt Abfragen und zu jedem Spaltennamen auch die Tabellen (BMW, Audi, Golf), so das ich alle Datensätze in einer Abfrage habe.
    Das ganze soll aber automatisch passieren. MYSQL soll selbst erkennen, wieviele und welche Tabelle noch mit ausgelesen werden sollen, also eine art If-Abfrage in MYSQL.

    Da gehts dann schon los, dass dir das gewählte Design Kopfstände abverlangt. Prepared Statements kennen zwar Platzhalter, aber nicht für Bezeichner. Und auch nur zwischen Client und Server, nicht bei Joins oder Subselects. Du kannst dir aber innerhalb einer Stored Procedure ein Prepared Statement aus Strings und Werten zusammenbauen und das dann ausführen. Aber schön geht anders.

    dedlfix.

    1. Hi dedlfix,

      Ohne deinen Grund dafür zu kennen, normalerweise ist das schlechtes Datenbankdesign. Wenn es gleichartige Daten sind, gehören die nach der reinen Lehre der Normalisierung in dieselbe Tabelle.

      Da gebe ich dir recht, ist wirklich schlechtes Datenbankdesign.
      Der Grund für die komplizierte Abfrage, liegt darin, das ich die Abfragen nicht in einer While-Schleife ausführen möchte.
      Also ala:

        
      while ( ... ) {  
           //SELECT...  
      }  
      
      

      Sonst wäre das alles kein Problem.

      Jetzt muss ich mir die Prepared, erst vorher zusammenbauen, sonst misst ^^

      Danke dir trotzdem.

      MfG
      Blackwane

      1. Tach!

        Der Grund für die komplizierte Abfrage, liegt darin, das ich die Abfragen nicht in einer While-Schleife ausführen möchte.

        while ( ... ) {

        //SELECT...
        }

          
        Auch dafür gibt es sicherlich eine elegantere Lösung beim "ordentlichen" Tabellendesign.  
          
        Ich vermute mal ins Blaue hinein, dass du BMW und Golf, aber nicht Audi in der Ergebnismenge haben möchtest. Also erster Teil wäre  
          
        `SELECT id FROM werkstatt WHERE name IN ('BMW', 'Golf')`{:.language-sql}  
          
        Das in die Abfrage der anderen Tabelle einbauen ergibt:  
          
        `SELECT felder FROM ordentliche_tabelle WHERE werkstattId IN (SELECT id FROM werkstatt WHERE name IN ('BMW', 'Golf'))`{:.language-sql}  
          
        Wenn das nicht deinem Anwendungsfall ähnelt, kannst du ja mal, wenn du möchtest, etwas weiter ausholen in der Beschreibung deines Anwendungsfalls.  
          
          
        dedlfix.