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üsselwortSymbol-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