![]() |
|
|||||||
| Newsgroup microsoft.public.de.access Forum microsoft.public.de.access |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Hallo alle zusammen,
ich glaube ich sitze auf der Leitung. Ich kapiere es einfach nicht. Ich habe zwei Tabellen 1. Rechner 2. Ausgeleihen In Rechner gibt es die Felder ID Geraetebezeichnung SNR Hersteller Typ Modell In Ausgeliehen: ID R-ID Anwender Ort Ausleihdatum Rückgabedatum Rechner ist 1:n mit Ausgeliehen verbunden. Nun will ich alle Rechner sehen die zurzeit nicht ausgeliehen sind. Also alle Rechner die nicht in der Ausgeliehen Tabelle stehen oder das Rückgabedatum Feld nicht leer ist. Dann sind sie eben auch frei. Wie bekomme ich den diese Abfrage hin? Ich habe jetzt einfach eine Abfrage im Entwurfsmodus geöffnet und beide Tabellen einbezogen. Wähle ich nun alle Felder(Beide Tabellen) aus so werden mir so viele Datensätze angezeigt wie in der Tabelle Ausgeliehen vorhanden sind. Ohne das ich das Kriterium Rückgabedatum mal einbeziehe. Mal angenommen es stehen in der Tabelle Rechner 100 Datensätze und in der Tabelle Ausgeliehen 10. Dann hätte ich jetzt gerne als Ergebnis die 90 aus der Rechner Tabelle und nicht die 10 aus der Ausgeliehen Tabelle. Mal ganz davon vom Rückgabefeld abgesehen. Was mache ich da falsch?? Holt mich einer von der Leitung herunter auf der ich stehe?? Gruß Ralf Dorn |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Ralf Dorn wrote:
> ... > Ich habe zwei Tabellen > > Rechner ist 1:n mit Ausgeliehen verbunden. > > Nun will ich alle Rechner sehen die zurzeit nicht ausgeliehen sind. > Also alle Rechner die nicht in der Ausgeliehen Tabelle stehen oder das > Rückgabedatum Feld nicht leer ist. Dann sind sie eben auch frei. > > Wie bekomme ich den diese Abfrage hin? > ... Datensätze aus A, die nicht in B sind www.donkarl.com?FAQ3.16 -- Servus Karl ********* Ich beantworte keine Access-Fragen per Email. ********* Access-FAQ: http://www.donkarl.com |
|
#3
|
|||
|
|||
|
Hallo Karl,
> www.donkarl.com?FAQ3.16 vielen Dank. Ich war doch nicht auf der Leitung gestanden. Das hätte ich nicht gewusst ;-) Nochmals danke Gruß Ralf |
|
#4
|
|||
|
|||
|
Ralf Dorn schrieb:
> > Hallo Karl, > > > www.donkarl.com?FAQ3.16 > > vielen Dank. Ich war doch nicht auf der Leitung gestanden. Das hätte ich > nicht gewusst ;-) > > Nochmals danke > Dafür gibt es auch einen Assistenten: Abfrage -> Neu -> Abfrage-Assistent zur Inkonsistenzabfrage Grüsse Roman |
|
#5
|
|||
|
|||
|
Hallo Ralf,
Ralf Dorn wrote: > Ich habe zwei Tabellen > 1. Rechner > 2. Ausgeleihen > In Rechner gibt es die Felder > ID > Geraetebezeichnung > SNR > In Ausgeliehen: > ID > R-ID > Ausleihdatum > Rückgabedatum > Rechner ist 1:n mit Ausgeliehen verbunden. > Nun will ich alle Rechner sehen die zurzeit nicht ausgeliehen sind. > Also alle Rechner die nicht in der Ausgeliehen Tabelle stehen Dazu hast du ja schon Antworten bekommen. > oder das > Rückgabedatum Feld nicht leer ist. Dann sind sie eben auch frei. Das macht mich etwas stutzig, denn was ist denn wenn ein Rechner auf unbestimmte Zeit ausgeliehen ist und der Ausleiher dann "irgendwann" entsprechend seiner Kündigungsfrist für den Ausleihvertrag den Rechner "irgendwann" zurück gibt? Dann ist der Rechner nicht frei sondern ausgeliehen. Wann er wieder frei wird hängt davon ab, wann das Rückgabedatum bekannt ist, bzw. in der Tabelle steht. Und genau so lange ist er halt als ausgeliehen zu erfassen. Mal ganz abgesehen davon, dass der Ausleiher das Rückgabedatum aus irgendwelchen Gründen nicht einhält / einhalten kann. Gruß, Frank |
|
#6
|
|||
|
|||
|
Hallo Ralf,
"Ralf Dorn" wrote: > Hallo alle zusammen, > > Ich habe zwei Tabellen > > 1. Rechner > 2. Ausgeleihen > > In Rechner gibt es die Felder > > ID > Geraetebezeichnung > SNR > Hersteller > Typ > Modell > > In Ausgeliehen: > > ID > R-ID > Anwender > Ort > Ausleihdatum > Rückgabedatum > > Rechner ist 1:n mit Ausgeliehen verbunden. > > Nun will ich alle Rechner sehen die zurzeit nicht ausgeliehen sind. Also > alle Rechner die nicht in der Ausgeliehen Tabelle stehen oder das > Rückgabedatum Feld nicht leer ist. Dann sind sie eben auch frei. > > Wie bekomme ich den diese Abfrage hin? Unterabfragen / subqueries helfen Dir weiter. > > Mal angenommen es stehen in der Tabelle Rechner 100 Datensätze und in der > Tabelle Ausgeliehen 10. > > Dann hätte ich jetzt gerne als Ergebnis die 90 aus der Rechner Tabelle und > nicht die 10 aus der Ausgeliehen Tabelle. Schritt 1: Ermittle alle ausgeliehenen Rechner mit SELECT t.R_ID FROM tblAusgeliehen AS t WHERE t.Rueckgabedatum IS NULL; Schritt 2: Die oben erstellte Abfrage als Unterabfrage in einer neuen Abfrage verwenden SELECT r.R_ID, r.Geraetebezeichnung FROM tblRechner AS r WHERE r.R_ID NOT IN ( SELECT t.R_ID FROM tblAusgeliehen AS t WHERE t.Rueckgabedatum IS NULL); Hierbei habe ich angenommen, dass beide Tabellen ueber R_ID verknuepft sind. IMO solltest Du diese Abfrage direkt im SQL-Fenster eingeben und nicht versuchen, den QBE-Assistenten zu verwenden. HTH Michael Sapich |
|
#7
|
|||
|
|||
|
Michael Sapich wrote:
> ... > Die oben erstellte Abfrage als Unterabfrage in einer neuen Abfrage > verwenden > > SELECT r.R_ID, r.Geraetebezeichnung FROM tblRechner AS r > WHERE r.R_ID NOT IN ( > SELECT t.R_ID FROM tblAusgeliehen AS t > WHERE t.Rueckgabedatum IS NULL); > ... Unterabfragen, noch dazu mit NOT IN, sind in Access/JET keine Boliden. Die Variante mit dem Outer Join, die er lt. seiner Antwort von vorgestern wohl genommen hat, ist wesentlich schneller. -- Servus Karl ********* Ich beantworte keine Access-Fragen per Email. ********* Access-FAQ: http://www.donkarl.com |
|
#8
|
|||
|
|||
|
Hallo Karl,
Hallo alle anderen die kir geantwortet haben, also eigentlich bin ich noch nicht ganz am Ziel. Mit der ersten Abfrage wie in deinem Beispiel auf deiner HP 3.16 habe ich jetzt alle DS die in Rechner noch nie ausgeliehen wurden. Da ich aber nicht mit dem Rückgabe Datum aus der zweiten Tabelle Ausgeliehen zurecht kam, habe ich nun eine zweite Abfrage erstellt mit der ich die Ausgeliehen Tabelle nach allen Datensätzen Abfrage die im Rückgabedatum <> Null ist. Diese sind also auch zur Verfügung. Da es aber einen ewigen Verleih und Rückgabe Rythmus gibt, können also auch mehrere DS mit dem gleichen Gerät geben die schon mal verleihen waren und wieder zurück kamen, also öfter vorkommen mit Rückgabe Datum. Jetzt habe ich mit gedacht, dass es doch viel einfacher wäre die Abfrage so zu gestalten, dass ich eine Abfrage erstelle in der alle Datensätze von Rechner angezeigt werden außer die DS aus der Tabelle Ausgeliehen die im Feld Rückgabedatum gleich Null stehen haben. Ein Rechner kann nur ausgeliehen werden wenn er nicht in der Tabelle Ausgeliehen vorhanden ist und in Rückgabedatum den Wert Null hat. Das wird beim Ausleihen Formular geprüft. Dazu habe ich auch eine Abfrage erstellt. Tabelle Ausgeliehen und Rückgabedatum ist Null. Aber wie bekomme ich es jetzt hin das dieses Ergebnis als Kriterium für eine neue Abfrage Verfügbare_Rechner ergenommen werden kann. Oder geht es auch anders? Gruß Ralf |
|
#9
|
|||
|
|||
|
Hallo Frank,
> Dann ist der Rechner nicht frei sondern ausgeliehen. > Wann er wieder frei wird hängt davon ab, wann > das Rückgabedatum bekannt ist, bzw. in der > Tabelle steht. Und genau so lange ist er halt > als ausgeliehen zu erfassen. Mal ganz abgesehen > davon, dass der Ausleiher das Rückgabedatum > aus irgendwelchen Gründen nicht einhält / einhalten > kann. deshalb gibt es ja die Tabelle Ausgeliehen. Dort wird die Ausgabe eines Rechners erfasst. Und erst wenn er zurück kommt wird das Rückgabedatum erfasst. Dann ist er wieder frei zur Verfügung. Wird er wieder ausgegeben so wird er in der Tabelle Ausgeliehen als weiterer DS erfasst. Damit kann ich auch einen Verlauf, sprich wie oft wurde das Gerät verliehen, von wann bis wann war das Gerät wo usw. Das Problem ist eben das nicht alle DS aus der Tabelle Rechner automatisch frei sind denn es kann ja sein das in der Tabelle Ausgeliehen Rechner stehen die noch nicht zurückgegeben sind. Daher brauche ich eine Abfrage alle DS auch Tabelle Rechner die nicht in Tabelle Ausgeliehen vorhanden sind und. Jetzt habe ich alle DS die noch nie verliehen wurden. Jetzt brauche ich aber auch noch alles DS die in Ausgeliehen stehen und als Rückgabedatum gleich Null haben. Diese muss ich anschließend auch noch aus der Tabelle Rechner abziehen. Oder was meinst du? |
|
#10
|
|||
|
|||
|
Hallo Ralf,
Ralf Dorn schrieb: > also eigentlich bin ich noch nicht ganz am Ziel. Mit der ersten Abfrage wie > in deinem Beispiel auf deiner HP 3.16 habe ich jetzt alle DS die in Rechner > noch nie ausgeliehen wurden. Da ich aber nicht mit dem Rückgabe Datum aus > der zweiten Tabelle Ausgeliehen zurecht kam, habe ich nun eine zweite > Abfrage erstellt mit der ich die Ausgeliehen Tabelle nach allen Datensätzen > Abfrage die im Rückgabedatum <> Null ist. Diese sind also auch zur > Verfügung. IMHO solltest Du es anderes herum angehen. Wenn Du als Kriterium für das Feld "Rückgabedatum" den Wert Is Null verwendest, erhältst Du als Ergebnis alle Rechner, die derzeit ausgeliehen sind. Diese Abfrage und die Tabelle mit den Rechnern verwendest Du jetzt für eine Abfrage zur Inkonsistenzsuche. CU -- Thomas Homepage: www.Team-Moeller.de |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Aktualisierungs-Abfrage mit Parametern aus einer anderen Tabelle:nicht alle Felder werden aktualisiert | Stefan Paesch | Newsgroup microsoft.public.de.access | 1 | 10-13-2009 04:25 PM |
| ersten und letzten 25 Datensätze einer Tabelle | Steffen | Newsgroup microsoft.public.de.sqlserver | 7 | 05-06-2009 11:01 AM |
| Suchfunktion im Formular: Datensatz einer Tabelle suchen und die / den zugehörigen Datensatz einer anderen Tabelle anzeigen. | Mica | Newsgroup de.comp.datenbanken.ms-access | 3 | 02-19-2009 06:50 PM |
| Werte im DropDown die noch nicht in einer anderen Tabelle genutz w | Joerg M. | Newsgroup microsoft.public.de.access | 2 | 10-08-2008 07:08 PM |
| Problem beim Abfragen der Anzahl von Datensätzen in einer Tabelle | Andrej Fraissl | Newsgroup microsoft.public.de.german.entwickler.dotnet.vb | 6 | 09-02-2008 01:19 PM |