Tanelorn.net

Medien & Phantastik => Multimedia => Multimedia - Software & Betriebsysteme => Thema gestartet von: Fire am 10.01.2007 | 17:25

Titel: [SQL] HILFEEEEEEEEEE
Beitrag von: Fire am 10.01.2007 | 17:25
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....
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Selganor [n/a] am 10.01.2007 | 17:32
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?
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Fire am 10.01.2007 | 17:39
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
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Maarzan am 10.01.2007 | 17:40
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.
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Der Count am 10.01.2007 | 17:51
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
;

Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Wodisch am 10.01.2007 | 17:59
Mich wundert, daß Ihr alle so fraglos davon ausgeht, daß die Schlagworte auch exakt so geschrieben werden.
Das kenne ich von "echten" Datenbanken leider nicht, daher würde ich anstelle von "=" lieber etwas in der Art empfehlen:
upper(sw1.name) like "%WISSENSCHAFTSGESCHICHTE%" and upper(sw2.name like "%EVOLUTIONSBIOLOGIE%"
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Fire am 10.01.2007 | 18:52
Oh Grosser "DerCount"...du hast meinen Tag gerettet....auf die Lösung wäre ICH nie gekommen, aber so funktioniert es einwandfrei!!!
Opfergaben...hmmm....ich geb dir einen aus, wenn du mal auf einem Grossen bist ;)

Problem gelöst! Danke an alle, die mitgeholfen haben...Super Forum!!! :) Ihr seid toll
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Der Count am 11.01.2007 | 09:15
Genau die Art von Ehrerbietung meinte ich!  ;D

Gern geschehen.

Sollten wir uns wirklich mal auf einem Grossen begegnen, komme ich auf Dein Angebot zurück.
 :)
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Crujach am 11.01.2007 | 16:26
warum geht das nicht einfach so mit OR? ??? Oder gibt doch das Ergebniss zurück wenn mindestens eine Bedingung erfüllt ist. Oder funktioniert in SQL das OR als XOR?
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Der Count am 11.01.2007 | 16:31
Gewünscht sind ja Bücher, die zu BEIDEN Schlagworten passen.
Mit OR bekommst Du die zwar auch, aber zusätzlich noch diejenigen, die nur zu einem der beiden passen. Und wenn ich Fire richtig verstanden habe, will er genau die nicht dabei haben.
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Fire am 11.01.2007 | 17:12
Genau...bei OR reicht auch eins der beiden schlagworte....es MÜSSEN aber beide schlagworte vorhanden sein...deswegen kein OR...
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Crujach am 11.01.2007 | 19:34
und warum dann nicht einfach AND statt OR ?
Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Fire am 12.01.2007 | 01:28
Weil sich dann die beiden schlagworte ausschliessen...ja ich weiss...macht keinen sinn...is aber so ;)

Titel: Re: [SQL] HILFEEEEEEEEEE
Beitrag von: Crujach am 12.01.2007 | 13:04
ok - danke für die Info :)