myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Access2010 -SQL: alle Datensätze aus li. Tabelle, einzelner Datensatz aus re. Tabelle

Antwort
Themen-Optionen Ansicht
Ungelesen 16.12.12, 18:48   #1
pro-logic
Anfänger
 
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
pro-logic ist noch neu hier! | 0 Respekt Punkte
Standard 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
pro-logic ist offline   Mit Zitat antworten
Ungelesen 16.12.12, 22:04   #2
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

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.
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 16.12.12, 23:37   #3
pro-logic
Anfänger
 
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
pro-logic ist noch neu hier! | 0 Respekt Punkte
Standard

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
pro-logic ist offline   Mit Zitat antworten
Ungelesen 16.12.12, 23:54   #4
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

Nein!
NetWebs ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 00:29   #5
slahn
Erfahrenes Mitglied
 
Benutzerbild von slahn
 
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
slahn ist noch neu hier! | 0 Respekt Punkte
Standard

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 ...
__________________
"[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]" (Klopfers Vater)
slahn ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 08:12   #6
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

@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.
NetWebs ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 08:13   #7
pro-logic
Anfänger
 
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
pro-logic ist noch neu hier! | 0 Respekt Punkte
Standard

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
pro-logic ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 19:33   #8
d03jo4n
OS X'ler
 
Benutzerbild von d03jo4n
 
Registriert seit: Aug 2012
Ort: /dev/random
Beiträge: 40
Bedankt: 8
d03jo4n ist noch neu hier! | 0 Respekt Punkte
Standard

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.
d03jo4n ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 20:08   #9
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

Und schon wieder scheitert man an der sprachliche Barriere mit der Muttersprache.
NetWebs ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 20:22   #10
slahn
Erfahrenes Mitglied
 
Benutzerbild von slahn
 
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
slahn ist noch neu hier! | 0 Respekt Punkte
Standard

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 ...
__________________
"[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]" (Klopfers Vater)
slahn ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 20:35   #11
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

slahn... mag sein, aber hast Du schon versucht die Sätze des TEs zu verstehen?
Daran scheitern wir!

Zitat:
Zitat von pro-logic Beitrag anzeigen
Dann würde immer alle Fahrzeuge angezeigt, aber nur die zusätzlichen Daten wenn RueckgabeDatum=NULL
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 17.12.12, 21:11   #12
slahn
Erfahrenes Mitglied
 
Benutzerbild von slahn
 
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
slahn ist noch neu hier! | 0 Respekt Punkte
Standard

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 ...
__________________
"[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]" (Klopfers Vater)
slahn ist offline   Mit Zitat antworten
Ungelesen 24.12.12, 10:50   #13
pro-logic
Anfänger
 
Registriert seit: Nov 2009
Beiträge: 39
Bedankt: 8
pro-logic ist noch neu hier! | 0 Respekt Punkte
Standard

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
pro-logic ist offline   Mit Zitat antworten
Ungelesen 24.12.12, 13:35   #14
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

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...
ProgMaster ist offline   Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.


Sitemap

().