Firewire Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 Stecke zur Zeit an einem Problem an dem ich nicht weiter komme.Ich versuche eine vereinfachte Erklärung abzugeben,welche aber den gleiche Sinn hat.Bitte nicht lachen, aber ich habe leider keine andere Erklärung gefunden: -in einer Tab. habe ich die Spalten Bäume und Früchte -Baum A hat z.B. alle Fruchtsorten: Birnen,Kirschen,Pflaumen und Äpfel -Baum B hat:Birnen, Kirschen und Äpfel -jeder Baumart steht nur einer Fruchtart gegenüber,somit existieren mehrere gleiche Baumarten(max.4) -fast alle Baumarten(unbestimmte Anzahl) haben Birnen auf ihren Ästen -außer 2,3(unbestimmte Anzahl)Bäume haben keine Birnen =>durch welche ausgetüftelte Abfrage erhalte ich die Bäume ohne Birnen ???!!! Zitieren
EGTEB Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 Aus deinem Tabellen- und Spaltenaufbau schlau zu werden ist gar nicht so einfach. Ich hoffe ich gehe richtig in meiner Annahme, dass du nur eine Tabelle hast, die keine weiteren Beziehungen besitzt. Gehe in die Entwurfsansicht der Abfrage und gib in der Spalte "Früchte" folgendes Kriterium ein NICHT WIE BIRNEN . Dann werden dir all die Baumarten angezeigt, die keine Birnen haben. Sollte das nicht reichen, musst du deine Fragen nochmal präzisieren. Zitieren
DevilDawn Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 @EGTEB: Wenn ich das richtig kapiert habe, handelt es sich hier um eine Tabelle zur Auflösung einer n:n-relation !? Ein Baum kann beliebig viele Früchte haben, jede Frucht kann auf beliebigen Bäumen hängen. n:n. Dann dürfte deine Abfrage nicht klappen (allerdings kann/kenne ich kein Access). Denn wenn in der Tabelle steht: Baum A <-> Birnen Baum A <-> Kirschen Baum B <-> Schokolade müsste deine Abfrage ergeben: Baum A <-> Kirschen Baum B <-> Schokolade was aber falsch ist, da es ja einen Eintrag gibt mit Baum A <-> Birnen. Soweit ich das sehe kommt man hier nur mit verschachtelten SELECTs hin. vermutend, DevilDawn Zitieren
Firewire Geschrieben 25. Juli 2000 Autor Geschrieben 25. Juli 2000 Hallo EGTEB! Also mit Nicht wie Birnen erhalte ich alle anderen Fruchtsorten,die auf den Baumarten(n) hängen.Jedoch möchte ich die Baumsorten herausgefiltert haben,die keine Birnen haben. Irgendwie muß bei der Abfrage eine Beziehung zwischen Baumart und Frucht definiert werden. Aber scheinbar wird mir das nur mit einem Script gelingen. ODER? Zitieren
Wolle Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 Hi, ich hab auch grad rumprobiert, aber über eine Abfrage hab ich es auch nicht hinbekommen. Über VBA wäre das ganze machbar. Gruß Wolle Zitieren
fadi Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 Moin, also ich habe eine Lösung, die allerdings eine kleine Änderung am Datenmodell voraussetzt: Tabelle baum ------------ id baum_name ============= Tabelle frucht -------------- id frucht_name ============== Tabelle nm ---------- ref_baum ref_frucht In der Tabelle nm findet die Zuordnung der Früchte zu den Bäumen statt: z.B. 1 - 1 == der Baum mit der ID 1 trägt die Frucht mit der ID 1. Und hier kommt der SQL der Abfrage: SELECT [nm].[ref_baum], First([baum].[baum]) AS [ErsterWert von baum] FROM nm LEFT JOIN baum ON [nm].[ref_baum]=[baum].[id_baum] GROUP BY [nm].[ref_baum] HAVING (((nm.ref_baum) Not In (SELECT nm.ref_baum FROM nm WHERE (((nm.ref_frucht)=1)) ; ))); In meinem Beispiel ist die Birne die Frucht mit der ID 1. Damit jeder Baum nur einmal angezeigt wird, habe ich <First([baum].[baum]) AS [ErsterWert von baum]> eingefügt, denn sonst beinhaltet das Ergebnisset Datensätze für jede Zuordnung der Bäume, die Birne nicht zugeordnet haben. Geht in der Entwurfsansicht der Abfrage über "Funktion-->Erster Wert" Hoffe, das hilft weiter. fadi Mußte ein Leerzeichen nach dem vorletzten ; einfügen, weil es sonst ein Smiley wird. <genau der> [Dieser Beitrag wurde von fadi am 25. Juli 2000 editiert.] Zitieren
Wolle Geschrieben 25. Juli 2000 Geschrieben 25. Juli 2000 Hi, ich habs doch noch gefunden. @fadi: dein "not in" ist die Lösung, auf die ich nicht gekommen bin. Select baum from tabelle where baum not in (select baum from tabelle where frucht="Birne") group by baum; Wolle Zitieren
Firewire Geschrieben 27. Juli 2000 Autor Geschrieben 27. Juli 2000 Hallo fadi! Also die "Tabelle nm" wäre dann meiner ursprünglichen wohl gleich, da ich hier auch eine Spalte "Baum" und eine Spalte "Frucht" habe.Deiner Meinung nach müßte ich ja 2 Primärschlüssel in einer Tab.verwenden(ID=>Frucht + ID=>Baum). Bin ich jetzt völlig im Zauberwald,aber irgendwie kann ich das nicht ganz nachvollziehen. Zitieren
fadi Geschrieben 28. Juli 2000 Geschrieben 28. Juli 2000 Moin, die Tabelle nm besteht aus zwei Long Integer Feldern und trägt Referenzen auf die Primärschlüssel der Tabellen frucht und baum. Insofern unterscheidet sich meine von Deiner Tabelle. Schau mal in den Thread >>Access Verständnisproblem (Beziehungen)<<, da wird eine verwandte Thematik diskutiert. Ich schätze aber, die Lösung von wolle ist handlicher und kommt auf das gleiche Ergebnis hinaus. fadi [Dieser Beitrag wurde von fadi am 28. Juli 2000 editiert.] Zitieren
Firewire Geschrieben 28. Juli 2000 Autor Geschrieben 28. Juli 2000 Hi Wolle! Von welcher Ausgangsposition gehst du aus?: -2 getrennte Tabellen(Frucht und Baum) -oder nur eine Tab. mit den Spalten(Frucht und Baum) Also ich bin hier echt am Verzweifeln und muß auch eingestehen das ich wenig Ahnung von der Syntax habe. Mein Vorschlag(in einer Tab.Frucht und Baum): Select [Garten].Baum FROM [Garten] WHERE ([Garten].Baum) NOT IN (SELECT Garten.Baum FROM Baum WHERE (Garten.Frucht="Birne"))) GROUP BY [Garten].Baum, [Garten].Frucht; Wäre echt nett wenn mir hier einer weiter hilft. [Dieser Beitrag wurde von Firewire am 28. Juli 2000 editiert.] Zitieren
fadi Geschrieben 28. Juli 2000 Geschrieben 28. Juli 2000 Moin firewire, also ich habe wolles Vorschlag auch mal nachgebildet und habe mir eine Tabelle mit den Feldern id, baum und frucht erzeugt, wobei ID <> ein AutoWert-Feld (ohne Duplikate) baum <> ein Textfeld frucht <> ein Textfeld ist. Die Tabelle heißt Tabelle1. Hier trägst Du entsprechend Deine Daten ein: 1 <> a <> pflaume 2 <> a <> birne 3 <> a <> kirsche 4 <> b <> apfel 5 <> b <> kirsche 6 <> c <> pflaume Wenn Du dann eine neue Abfrage erzeugst, die auf der oben erzeugten Tabelle basiert und folgenden SQL in sich trägt: SELECT Tabelle1.id, Tabelle1.baum FROM Tabelle1 GROUP BY Tabelle1.id, Tabelle1.baum HAVING (((Tabelle1.baum) Not In (select baum from tabelle1 where frucht="Birne" ; ))); bekommst Du folgenden Ergebnissatz: 4 b 5 b 6 c Das unschöne ist meiner Meinung nach halt, daß Du zu viele Datensätze erhältst, denn Du willst ja nicht alle Zuordnungen haben, sondern nur die Bäume, die keine Birnen tragen. Wenn es immer noch nicht klar ist, schick mir 'ne eMail. fadi Und wieder das Smiley-Problem im SQL [Dieser Beitrag wurde von fadi am 28. Juli 2000 editiert.] Zitieren
Wolle Geschrieben 28. Juli 2000 Geschrieben 28. Juli 2000 Hi, <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">Zitat:</font><HR>Original erstellt von Firewire: Von welcher Ausgangsposition gehst du aus?: -2 getrennte Tabellen(Frucht und Baum) -oder nur eine Tab. mit den Spalten(Frucht und Baum) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.