Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
16.12.12, 17:48
|
#1
|
Anfänger
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
|
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
|
|
|
16.12.12, 21:04
|
#2
|
Banned
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
|
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.
|
|
|
16.12.12, 22:37
|
#3
|
Anfänger
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
|
Du hast recht, mit Join kann man schon einiges erreichen...
Code:
SELECT tblFahrzeuge.Fahrzeugkennung, tblFahrzeuge.ReserveFahrzeug, tblReserveFahrzeugAbgabe.AbgabeDatum, tblReserveFahrzeugAbgabe.Nachricht, tblReserveFahrzeugAbgabe.RueckgabeDatum
FROM tblFahrzeuge
LEFT JOIN tblReserveFahrzeugAbgabe ON tblFahrzeuge.FahrzeugID = tblReserveFahrzeugAbgabe.FahrzeugID
WHERE tblFahrzeuge.ReserveFahrzeug=True;
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
RTW 4-R 01.12.2012 an FW6 10.12.2012 <--- das soll nicht so
RTW 4-5 10.11.2012 an FW10 (noch nicht zurück) <--- das soll so
WLF 4-1 - <--- das soll auch so
Wenn ich aus
Code:
WHERE tblFahrzeuge.ReserveFahrzeug=True; z.B.
Code:
WHERE tblFahrzeuge.ReserveFahrzeug=True AND IsNull(tblReserveFahrzeugAbgabe.RueckgabeDatum)=True;
mache, hat das zur Folge das folgendes Ergebnis heraus kommt:
Code:
Fzg: Datum: Text: Rückgabe
WLF 4-1 -
(weil dies das einiges Fahrzeug ist für das es keinen Datensatz in der zweiten Tabelle gibt, bzw. wo o.g. Bedingung zutrifft)
D.h. folgendes Ergebnis wäre mein Wunsch:
Code:
Fzg: Datum: Text: Rückgabe
RTW 4-R - (selbe wie oben, aber da ein Rückgabedatum eingetragen ist wird nur der Fahrzeugname angezeigt)
RTW 4-5 10.11.2012 an FW10 (noch nicht zurück)
WLF 4-1 -
Wird es jetzt eindeutiger?
MfG pL
|
|
|
16.12.12, 22:54
|
#4
|
Banned
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
|
Nein!
|
|
|
16.12.12, 23:29
|
#5
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
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 ...
|
|
|
17.12.12, 07:13
|
#6
|
Anfänger
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
|
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
|
|
|
17.12.12, 19:35
|
#7
|
Banned
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
|
slahn... mag sein, aber hast Du schon versucht die Sätze des TEs zu verstehen?
Daran scheitern wir!
Zitat:
Zitat von pro-logic
Dann würde immer alle Fahrzeuge angezeigt, aber nur die zusätzlichen Daten wenn RueckgabeDatum=NULL
|
|
|
|
17.12.12, 07:12
|
#8
|
Banned
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
|
@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.
|
|
|
17.12.12, 18:33
|
#9
|
OS X'ler
Registriert seit: Aug 2012
Ort: /dev/random
Beiträge: 40
Bedankt: 8
|
Bevor du noch dreimal erklärst, was du möchtest, solltest du ( in einem einzigen, neuen Post, also nichts von siehe oben, bitte ) - deine Tabellenstruktur darstellen (am besten in Codeblöcken)
- einen Beispieldatensatz posten
- und in zwei, drei Sätzen erklären, was du aus Tabelle #1 und Tabelle #2 willst und wie die Daten verknüpft sind
Sonst wird das hier nie etwas.
__________________
Ghost hardware.
|
|
|
17.12.12, 19:08
|
#10
|
Banned
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
|
Und schon wieder scheitert man an der sprachliche Barriere mit der Muttersprache.
|
|
|
17.12.12, 19:22
|
#11
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
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
Nicht getestet ...
|
|
|
17.12.12, 20:11
|
#12
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
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 ...
|
|
|
24.12.12, 09:50
|
#13
|
Anfänger
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
|
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
|
|
|
24.12.12, 12:35
|
#14
|
Banned
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
|
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...
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
().
|