Medien & Phantastik > Multimedia - Software & Betriebsysteme
[SQL] HILFEEEEEEEEEE
Fire:
Hi...ich bin jetzt schon ein paar stunden an einer kleinigkeit...vielleicht gibts hier cracks, die mir das erklären können:
zuerst die aufgabe:
Um eine Benutzerin bei ihrer Literaturrecherche zu unterstützen sucht die
Bibliothekarin nach Büchern, die von der Geschichte der Evolutionsbiologie handeln (Bücher, die sowohl den Deskriptor „Wissenschaftsgeschichte”
als auch den Deskriptor „Evolutionsbiologie” besitzen).
dann meine schemata dazu (damit ihr wisst, wie meine tabellen aussehen (natürlich sind sie auch schon passend gefüllt)):
Buch: {[Buchnr: integer, Titel: string, ISBN: integer]}
Schlagwort: {[Schlagwortnr: integer, Name: string]}
BuchSchlagwortRel: {[Buchnr: integer, Schlagwortnr: integer]}
und (nicht ganz) mein entwurf dazu:
SELECT buch.titel FROM buch, schlagwort, buchschlagwortrel WHERE (schlagwort.name = "Wissenschaftsgeschichte" OR schlagwort.name = "Evolutionsbiologie") AND buchschlagwortrel.buchnr = buch.buchnr AND buchschlagwortrel.schlagwortnr = schlagwort.schlagwortnr;
is ja ganz nett...bringt auch das richtige ergebnis, ABER durch das OR ist ja eigentlich nur eins der beiden schlagwörter nötig! ich muss aber beide abfangen und finde da nicht das passende...union scheint es nicht zu sein und intersect auch nicht....
hat hier jemand nen plan?! is das einzige, was mir noch zu meiner hausarbeit für die uni fehlt! danach kann ich das ding sofort abgeben....plz help...ich bin am verzweifeln....
Selganor [n/a]:
Kann mit deinem Schema gar nicht gehen.
Denn da kann jedes Buch ja nur ein Schlagwort haben.
Wie willst du da ein Buch finden das zwei Schlagworte besitzt?
Fire:
Is doch N:M Beziehung...
In der BuchSchlagwortRel (das ist die Hilfstabelle) stehen die Bücher mit ihren jeweiligen Schlagwörtern drin.
Die Buchnr als auch die Schlagwortnr in BuchSchlagwortRel sind Fremdschlüssel zu jeweils den Primärschlüsseln in ihren eignen tabellen
Also kann z.B. ein Buch mehrere Schlagwörter haben
Maarzan:
In der BuchSchlagwortRel kann es n:m Verbindungen geben.
Theoretisch kann man für exakt dieses Problem
SELECT buch.titel FROM buch, schlagwort sw1, schlagwort sw2, buchschlagwortrel WHERE (sw1.name = "Wissenschaftsgeschichte" and sw2.name = "Evolutionsbiologie") AND buchschlagwortrel.buchnr = buch.buchnr AND buchschlagwortrel.schlagwortnr = sw1.schlagwortnr AND buchschlagwortrel.schlagwortnr = sw2.schlagwortnr ;
Die echte Tabelle Schlagwort wird als SW1 und SW2 zweimal aufgerufen.
aber dann muss die Abfrage auch zwei Schlagworte suchen bzw die Tabelle diese enthalten. Praktisch etwas unsinnig.
Der Count:
Probier's mal hiermit:
SELECT titel FROM buch b WHERE
EXISTS
(SELECT * FROM schlagwort, buchschlagwortrel WHERE
schlagwort.name = "Evolutionsbiologie" AND
schlagwort.schlagwortnr = buchschlagwortrel.schlagwortnr AND
buchschlagwortrel.buchnr = b.buchnr)
AND EXISTS
(SELECT * FROM schlagwort, buchschlagwortrel WHERE
schlagwort.name = "Wissenschaftsgeschichte" AND
schlagwort.schlagwortnr = buchschlagwortrel.schlagwortnr AND
buchschlagwortrel.buchnr = b.buchnr)
Die beiden EXISTS-Blöcke sind im Prinzip gleich, nur dass sie eben auf die unterschiedlichen Schlagworte überprüfen.
Falls es funktioniert, erwarte ich entsprechende Opfergaben und eine angemessene Ehrerbietung! ;)
Ansonsten probier mal Marzans Vorschlag in folgender Abwandlung:
SELECT buch.titel FROM buch, schlagwort sw1, schlagwort sw2, buchschlagwortrel bwr1, buchschlagwortrel bwr2 WHERE (sw1.name = "Wissenschaftsgeschichte" and sw2.name = "Evolutionsbiologie") AND bwr1.buchnr = buch.buchnr AND bwr1.schlagwortnr = sw1.schlagwortnr
AND bwr2.buchnr = buch.buchnr AND bwr2.schlagwortnr = sw2.schlagwortnr;
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln