TQuery & .mdb select im select möglich???



  • Hi Leute hab da mal ne wichtige frage.

    Ich benutze nen TQuery mit einer Verbindung auf eine .mdb Datenbank

    Ich brauche jetzt so was wie

    SELECT * FROM (SELECT * FROM xyz) WHERE z = 3

    ich bekomme es einfach nicht hin.

    könnt ihr mir helfen.



  • Hi,

    was willst du mit (SELECT * FROM xyz) erreichen?
    Eigentlich wird an der Stelle die Datenbank-Tabelle genannt.

    mfg
    kpeter



  • Hallo

    Zumindestens in PostgreSQL wäre das eine gültige verschachtelte SQL-Anweisung. Allerdings macht sie keinen Sinn, denn das läßt sich auch so vereinfachen :

    SELECT * FROM xyz WHERE z = 3
    

    Ob in deiner Access-Version solche Verschachtelungen überhaupt möglich sind weiß ich nicht, da solltest du mal im DB-Forum nachfragen.

    bis bald
    akari



  • du kannst verschachtelte Abfragen machen, dabei werden dann temporäre Tabellen erzeugt.

    SELECT tab.id, temp.id FROM tab, (SELECT id FROM tab2) AS temp
    

    Das ganze muss dann nur richtig gegroupt oder mit WHERE eingegrenzt werden, sonst wird in diesem Fall jede id von tab mit jeder id von temp verknüpft, was am Ende Anzahl_tab.id * Anzahl_temp.id Ausgaben generiert.

    greetz KN4CK3R



  • Hallo

    KN4CK3R : Meiner Meinung nach ist dein Beispiel nicht vergleichbar mit dem von Tarantel86. Beide haben verschiedene Auswirkungen auf die Datenmenge und die möglichen Berechnungen. Als etwas komplexeres Beispiel für die von mir angesprochene Verschachtelung :

    // Äußere Abfrage. Legt die Felder fest die nachher als Ergebnis angezeigt werden
    SELECT netto, mwst, netto * mwst / 100 AS brutto FROM
    (
    
      // Innere Abfrage. Legt die Quelle der Datensätze fest
      SELECT preis AS netto, mwst FROM tabelle_a 
      UNION
      SELECT kosten * anzahl AS netto, mwst FROM tabelle_b
    
    ) AS sub
    

    Der Vorteil : Ich kann in der inneren Abfrage beliebige Datenmengen zusammenfassen (UNION) und die Felder angleichen (AS netto). Die äußere Abfrage bekommt nun eine gleichmäßige Datenmenge, auf die eine gleichförmige Berechnung angewendet werden kann.
    Natürlich kann man in diesem Beispiel die Berechnung auch in die innere Abfrage integrieren und die äußere weglassen, aber bei mehreren beteiligten Feldern von verschiedenen Quellen und komplexeren Rechnungen sind solche Tricks sehr hilfreich um noch die Übersicht in der Abfrage zu bewahren.

    bis bald
    akari



  • ist das nicht beides das gleiche? Deins unterscheidet sich von meinem doch nur dadurch, dass du mit den Werten der inneren Abfrage etwas berechnest, während bei mir 2 Sachen ausgegeben werden. Das Beispiel mit den IDs ist vielleicht schlecht gewählt gewesen von mir, da man statt meiner inneren Abfrage auch einfach tab2 einsetzen könnte. Aber vom Prinzip her meinen wir doch beide das gleiche, oder irre ich mich da?

    greetz KN4CK3R



  • Hallo

    Der Unterschied ist meiner Meinung nach, das bei deiner Variante es nicht möglich ist zwischen den Feldern von temp und tab eine Beziehung aufzubauen. Sei es nun eine Relation zwischen IDs, oder eine Berechnung von Formeln. Denn das würde erst in einer zweiten Stufe gehen, eben mit der von mir gezeigten Verschachtelung.

    Wenn es dir allerdings gelingt mein letztes Beispiel in deiner Variante umzusetzen hast du micht natürlich überzeugt.

    bis bald
    akari



  • nein, geht nicht. Ich bräuchte eine Unterabfrage mehr. Die die das UNION ersetzen würde.

    greetz KN4CK3R



  • Hi danke erst mal für eure Beiträge,

    leider geht das alles nicht so wie ich es haben will.

    @ akari
    Ich habe deinen Code versucht und bekomme immer wieder die selbe Meldung, egal ob ich ne Klammer mehr oder weniger setzte.

    Hier die Meldung bei diesem SQL befehl:

    SELECT netto, mwst, netto * mwst / 100 AS brutto FROM
    (
      SELECT preis AS netto, mwst FROM tabelle_a
      UNION
      SELECT kosten * anzahl AS netto, mwst FROM tabelle_b
    
    ) AS sub
    

    ---------------------------
    Project1
    ---------------------------
    Ungültiges Schlüsselwort

    Symbol-String: SELECT

    Zeilennummer: 3.
    ---------------------------
    OK
    ---------------------------

    Hat vielleicht noch wer ne Idee ??



  • Hallo

    Vermutlich kommt Access nicht mit der Syntax zurecht. Wie ich schon sagte, schau mal ins DB-Forum oder in die Doku zu Access.

    bis bald
    akari


Log in to reply