Medien & Phantastik > Multimedia - Software & Betriebsysteme

[SQL] HILFEEEEEEEEEE

(1/3) > >>

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