tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
506
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    Hallo zusammen,

    ich habe 2 Tabellen, die ich in der Art verknüpfen muss, dass in der einen Tabelle der Name der Spalte steht die in der 2. Tabelle abgerufen werden soll:
    Code :
    1
    
    select a.id, a.name from a where (a.(select spaltenname from b where x = y) = "XYZ").


    So wie angenommen geht`s leider nicht.

    Grüße und Danke

    querytail
    Geändert von querytail (30.11.11 um 12:23 Uhr)
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    MS Access? Oracle?

    Zusatzfrage: Ist die Spalte eine beliebige oder eine aus einer Begrenzten Menge?

    Nachtrag:
    So könnte man es mit MySQL oder Oracle umsetzen wenn es nur um eine begrenzte Anzahl Spalten geht.

    Zuerst ein UNION, die alle Spalten untereinander setzt und als neues Fels den Spaltennamen beinhaltet. Anschliessend dieses mit der Spaltenauswahl verknüpfen

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    SELECT
        data_a.id,
        data_a.name
    FROM
        (
            SELECT
                id,
                name,
                spalte1 AS wert,
                'spalte1' AS spaltenname
            FROM a
            UNION
            SELECT
                id,
                name,
                spalte2 AS wert,
                'spalte2' AS spaltenname
            FROM a
            UNION
            SELECT
                id,
                name,
                spalte3 AS wert,
                'spalte3' AS spaltenname
            FROM a
        ) AS data_a
        INNER JOIN 
        ( 
            SELECT spaltenname 
            FROM b 
            WHERE x = y
        ) AS data_b
            ON data_b.spaltenname = data_a.spaltenname
    WHERE
        data_a.wert = 'XYZ';
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    Hallo,

    es geht um MySQL. Ich habe maximal 5 Spalten zur Auswahl.

    Grüße & Danke

    querytail
     

  4. #4
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    Verstehe ich das dann richtig, dass in der ersten Klammer jeweils nur ein Wert genommen wird und das beliebig erweitert werden kann? Danke nochmal ******

    Viele Grüße

    querytail
     

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Jepp. Die erste Kalmemr kann mit UNION erweitert werden, so dass alle 5 Spalten ausgelesen werden.

    In der ersten Klammer wird aus
    Code :
    1
    2
    3
    4
    
    ID | S1 | S2 | S3 | S4 | S5
    ---|----|----|----|----|---
     1 | 12 |    |    | 15 |
     2 |    | A  | B  | C  | D

    das folgende
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    ID | WERT | SPALTENNAMEN
    ---|------|-------------
     1 | 12   | S1
     1 |      | S2
     1 |      | S3
     1 | 15   | S4
     1 |      | S5
     2 |      | S1
     2 | A    | S2
     2 | B    | S3
     2 | C    | S4
     2 | D    | S5

    Darauf kann man nachher mit spaltenname und wert ausfiltern
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  6. #6
    querytail querytail ist offline Mitglied Gold
    Registriert seit
    Jul 2010
    Beiträge
    116
    Danke für die Erklärung. Das hat mir wieder sehr viel Zeit erspart.
     

  7. #7
    Avatar von takidoso
    takidoso takidoso ist offline Mitglied Brillant
    Registriert seit
    Aug 2004
    Ort
    Kömigstein
    Beiträge
    911
    Hi Ho,
    mal eine Frage... Wenn ich es richtig verstehe hast du 2 Tabellen die miteinander in Beziehung stehen. Wobei die eine vermutlich eine ID als PK und die andere als FK verwendet, ist das soweit richtig verstanden?

    Hast Du es dann mal mit einem Join versucht? dürfte von der Ausführugn schneller sein als ein Select im Select.

    mfg

    Takidoso
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Er hat in einer Tabelle eine Spalte in der der Name der Spalte der anderen Tabelle steht in der gesucht werden muss. So habe ich das verstanden. Nix mit PK FK etc.

    Also etwa so
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Tabelle a:
    ID | S1 | S2 | S3 | S4 | S5
    ---|----|----|----|----|---
     1 | 12 |    |    | 15 |
     2 |    | A  | B  | C  | D
     
    Tabelle b:
    ID | spaltename | X
    -------------------
     1 | S1         | 1A
     2 | S2         | 1A
     3 | S1         | 1B
     4 | S4         | 1C

    Und nun will er zum Beispiel alle Eintràge der Tabelle a, welche in der Spalte X der Tabelle b den Wert Wert '1A' haben und in der Tabelle a in der entsprechenden Spalte ein 'A'.

    Also, alle Zeilen mit X = '1A' as Tabelle b: Zeilen 1 und 2.
    Also die apaltennamen S1 und S2.

    Nun müssen wir in Tabelle a alle Enträge suchen die in Spalte S1 oder S2 den Wert 'A' haben

    Gibt in meinem Beispiel natürlich die Zeile mit der ID 2 aus der Tabelle a zurück


    Mit JOIN geht das nicht....
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    tvtotal tvtotal ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    60
    Hallo ******

    Ich möchte sowas auch nutzen, habe aber Probleme, das bei mir umzusetzen. Ich krieg andauernd eine Fehlermeldung in phpmyadin.

    Kann mir jeand erklären, wo
    Code :
    1
    2
    
    data_a.id,
        data_a.name

    abgerufen wird? Ist alles zwischen dem ersten "FROM" und dem letzten "WHERE" nur zur Bestimmung der Spalte? Wenn ich noch mehr Daten (*) benötige, wie kann die Abfrage erweitern? Was bedeutet folgendes?:
    Code :
    1
    2
    
                 spalte1 AS wert,
                'spalte1' AS spaltenname

    Warum steht das einmal ohne und einmal it Hochkommatas ?

    Danke an alle, Gruß tvtotal
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Item: In Hochkomma ist ein fixer String, ohne Hochkomma der Inhalt der Spalte
    Lass einfach mal das kleine Query laufen (natürlich auf deine Namensgebungen etc. angepasst) und du wirst den Unterschied sehen
    Code sql:
    1
    2
    3
    4
    5
    6
    
            SELECT
                id,
                name,
                spalte3 AS wert,
                'spalte3' AS spaltenname
            FROM a

    Item: Die weiteten gewünschten Spaltennamen müssen in JEDEM Teil des UNION-SubQuery hinzugefügt werden. Erst dann sind sie über data_a.feldname abrufbar
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  11. #11
    tvtotal tvtotal ist offline Mitglied Silber
    Registriert seit
    Mar 2006
    Beiträge
    60
    Ich habe das nun geschafft. Was mache ich aber, wenn ich z.B. Spalte 3 nochmal abfragen möchte?
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von tvtotal Beitrag anzeigen
    Ich habe das nun geschafft. Was mache ich aber, wenn ich z.B. Spalte 3 nochmal abfragen möchte?
    Wie meinen?
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Datensatzposition aus Abfrage bestimmen?
    Von unrealzero_php im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 30.06.09, 15:16
  2. Passworteingabe über Expression bestimmen
    Von Kai-Behncke im Forum PHP
    Antworten: 8
    Letzter Beitrag: 28.01.09, 13:53
  3. select abfrage mit like bezogen auf tabellenspalte [mySQL]
    Von hegelX im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 23.11.05, 13:32
  4. Columns in JTable über CMP EJB füllen/bestimmen
    Von Tischtennisspieler im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 10.02.05, 11:03
  5. Tabellenspalte optimale Breite bestimmen
    Von puetz im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 13.01.05, 16:01