![]() |
Access2010 -SQL: alle Datensätze aus li. Tabelle, einzelner Datensatz aus re. Tabelle
Hallo Zusammen!
ich bin in SQL noch nicht so weit, dass ich folgendes Problem gelöst bekomme und auch über google habe ich keine passenden Infos gefunden (wahrscheinlich weil ich nicht weiß wonach ich suchen muss;-)) Ich habe folgende zwei Tabellen: Tabelle_Fahrzeuge ------------------------ FahrzeugID Bezeichnung Kennzeichen Reserve(Boolean) Tabelle_ReserveAbgabe ----------------------------- ID FahrzeugID AbgabeDatum Text RueckgabeDatum Ich möchte (möglichst mit einer Abfrage) alle Reservefahrzeuge [SELECT * FROM Tabelle_Fahrzeuge WHERE Reserve=true] und den jeweils dazu passenden Datensatz aus der Tabelle_ReserveAbgabe auslesen. Dabei ist der "passende Datensatz" immer derjenige, bei dem kein Rückgabedatum eingetragen wurde oder es gibt für das entsprechende Fzg keinen Datensatz in der Tabelle_ReserveAbgabe. Sollte dann so aussehen: Bez. Abgabe Text Rückgabe RTW 4-R 01.12.2012 an FW6 - RTW 4-5 - WLF 4-1 - RBUS 4 06.11.2012 Fahrschule - Heißt umgekehrt wenn ein Rückgabedatum eingetragen wird, verschwindet der angehängte Datensatz wieder. Wird klar was ich versuche? MfG pL |
Ich versteh das Problem nicht.
Das sollte doch eine einfache SELECT FROM WHERE Abfrage sein... Wie sieht denn Deine Abfrage aus? Alternativ kannst Du auch ein JOIN verwenden. |
Du hast recht, mit Join kann man schon einiges erreichen...
Code:
SELECT tblFahrzeuge.Fahrzeugkennung, tblFahrzeuge.ReserveFahrzeug, tblReserveFahrzeugAbgabe.AbgabeDatum, tblReserveFahrzeugAbgabe.Nachricht, tblReserveFahrzeugAbgabe.RueckgabeDatum Mit dieser Abfrage werden immer alle verfügbaren Fahrzeuge angezeigt und wenn existent auch der entsprechende Datensatz aus der "Leihliste". Der Datensatz aus der Leihliste soll aber nur angezeigt werden, wenn das Rückgabedatum nicht eingetragen ist (das Fahrzeug wurde verliehen und wurde noch nicht zurück gebracht) Also z.B. so ein Ergebnis: Code:
Fzg: Datum: Text: Rückgabe Wenn ich aus Code:
WHERE tblFahrzeuge.ReserveFahrzeug=True; z.B. Code:
WHERE tblFahrzeuge.ReserveFahrzeug=True AND IsNull(tblReserveFahrzeugAbgabe.RueckgabeDatum)=True; Code:
Fzg: Datum: Text: Rückgabe D.h. folgendes Ergebnis wäre mein Wunsch: Code:
Fzg: Datum: Text: Rückgabe Wird es jetzt eindeutiger? MfG pL |
Nein!
|
SELECT * FROM Tabelle_ReserveAbgabe WHERE RueckgabeDatum IS NOT NULL
Suchst du das? Wenn es dir aber darum geht, was er anzeigen soll, dann wird es dir nicht erspart bleiben, zwei getrennte selects zu machen ... Jedoch wird ja diene Abfrage doch eh in einem Programm (PHP, Java, ...) verarbeitet ... also mach dort diese Abfragen und stelle es dort dann deinen Wünschen entsprechend da ... |
@slahn
Das kann es nicht sein, denn du fragst nur eine Tabelle ab. Zwei Selects kann man auch mit einer Query durchführen. Aber es ist gänzlich unklar was der TE überhaupt will. |
Ok, ich formuliere es mal so:
Würde ich zwei getrennte Selects machen, würde das so (ähnlich) aussehen: SELECT * FROM tblFahrzeuge WHERE Reserve=True; und SELECT * FROM tblReserveFahrzeugAbgabe WHERE RueckgabeDatum IS NULL; dann würde man die beiden Programmtechnisch verknüpfen. Dann würde immer alle Fahrzeuge angezeigt, aber nur die zusätzlichen Daten wenn RueckgabeDatum=NULL Bei den o.g. Abfragen bekommt man entweder nur die Fahrzeuge ohne Gegeneintrag oder alle - inkl. Rückgabedatum. Da ich mit Access "arbeiten" muss möchte ich aber EINE abfrage, damit ich mir kein VBA-Makro basteln muss um das was ich möchte darzustellen. MfG pL |
Bevor du noch dreimal erklärst, was du möchtest, solltest du ( in einem einzigen, neuen Post, also nichts von siehe oben, bitte )
Sonst wird das hier nie etwas. |
Und schon wieder scheitert man an der sprachliche Barriere mit der Muttersprache.
|
Mein letzter Versuch:
Code:
SELECT Tabelle_Fahrzeuge.Bezeichnung, Tabelle_ReserveAbgabe.AbgabeDatum, Tabelle_ReserveAbgabe.Text FROM Tabelle_Fahrzeuge WHERE Tabelle_Fahrzeuge.Reserve=True INNER JOIN Tabelle_ReserveAbgabe ON Tabelle_Fahrzeuge.FahrzeugID=Tabelle_ReserveAbgabe.FahrzeugID |
slahn... mag sein, aber hast Du schon versucht die Sätze des TEs zu verstehen?
Daran scheitern wir! Zitat:
|
Versucht ja, aber meine Antworten haben eher etwas mit Raten zu tun ... einfach blind ins Leere geschossen und hoffen dass die Antwort richtig ist, oder den TE dazu bringt, eine bessere Erklärung abzugeben ... :)
|
Da ich offenbar besser darin Probleme zu erzeugen, als sie zu beschreiben habe ich mich nochmal eingehend mit SQL (JOINS und Subselects) beschäftigt.
Folgende Abfrage bringt das gewünschte Ergebnis: (Die Tabellen sind dabei wie oben beschrieben) SELECT tblFahrzeuge.Fahrzeugkennung, tblFahrzeuge.ReserveFahrzeug, tRFA.AbgabeDatum, tRFA.Nachricht, tRFA.RueckgabeDatum FROM tblFahrzeuge LEFT JOIN (SELECT * FROM tblReserveFahrzeugAbgabe WHERE IsNull(RueckgabeDatum)<>False) AS tRFA ON tblFahrzeuge.FahrzeugID = tRFA.FahrzeugID WHERE tblFahrzeuge.ReserveFahrzeug=True; Es werden IMMER ALLE Reservefahrzeuge in der Liste angezeigt. Zusätzlich werden die Felder aus der zweiten Tabelle angezeigt. Diese sind Leer wenn Rückgabe<>0 und zeigen Abgabe und Empfänger wenn Rückgabe=0. Bei Bedarf kann ich gerne Screenshots nachliefern um es zu verdeutlichen. Danke allen! MfG pL |
Oh je je, du solltest Dir.schnell aneignen zu beschreiben was der IST und der SOLL-Zustand seien solleHelfen könnte ich Dir ja, nur muss schon klar sein, was zu tun ist. Soll... Ist...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.