Autor Thema: [SQL] HILFEEEEEEEEEE  (Gelesen 2802 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Fire

  • Gast
[SQL] HILFEEEEEEEEEE
« 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....
« Letzte Änderung: 10.01.2007 | 17:44 von Fire »

Offline Selganor [n/a]

  • Moderator
  • Titan
  • *****
  • Beiträge: 34.339
  • Geschlecht: Männlich
  • Username: Selganor
Re: [SQL] HILFEEEEEEEEEE
« Antwort #1 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?
Abraham Maslow said in 1966: "It is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail."

Fire

  • Gast
Re: [SQL] HILFEEEEEEEEEE
« Antwort #2 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

Offline Maarzan

  • Mythos
  • ********
  • Beiträge: 8.794
  • Username: Maarzan
Re: [SQL] HILFEEEEEEEEEE
« Antwort #3 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.
Storytellertraumatisiert und auf der Suche nach einer kuscheligen Selbsthilferunde ...

Offline Der Count

  • Experienced
  • ***
  • Beiträge: 356
  • Geschlecht: Männlich
  • Username: DerCount
Re: [SQL] HILFEEEEEEEEEE
« Antwort #4 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
;

Der Optimist denkt, dass wir in der bestmöglichen Welt leben.
Der Pessimist befürchtet, dass das stimmt.

Offline Wodisch

  • Der graue Wortwitzwolf!
  • Legend
  • *******
  • Wortwitze für alle!
  • Beiträge: 5.624
  • Geschlecht: Männlich
  • Username: Wodisch
    • www
Re: [SQL] HILFEEEEEEEEEE
« Antwort #5 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%"

Fire

  • Gast
Re: [SQL] HILFEEEEEEEEEE
« Antwort #6 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

Offline Der Count

  • Experienced
  • ***
  • Beiträge: 356
  • Geschlecht: Männlich
  • Username: DerCount
Re: [SQL] HILFEEEEEEEEEE
« Antwort #7 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.
 :)
Der Optimist denkt, dass wir in der bestmöglichen Welt leben.
Der Pessimist befürchtet, dass das stimmt.

Offline Crujach

  • Boobs-Consultant
  • Legend
  • *******
  • Beiträge: 6.793
  • Geschlecht: Männlich
  • Username: Crujach
Re: [SQL] HILFEEEEEEEEEE
« Antwort #8 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?

Offline Der Count

  • Experienced
  • ***
  • Beiträge: 356
  • Geschlecht: Männlich
  • Username: DerCount
Re: [SQL] HILFEEEEEEEEEE
« Antwort #9 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.
Der Optimist denkt, dass wir in der bestmöglichen Welt leben.
Der Pessimist befürchtet, dass das stimmt.

Fire

  • Gast
Re: [SQL] HILFEEEEEEEEEE
« Antwort #10 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...

Offline Crujach

  • Boobs-Consultant
  • Legend
  • *******
  • Beiträge: 6.793
  • Geschlecht: Männlich
  • Username: Crujach
Re: [SQL] HILFEEEEEEEEEE
« Antwort #11 am: 11.01.2007 | 19:34 »
und warum dann nicht einfach AND statt OR ?

Fire

  • Gast
Re: [SQL] HILFEEEEEEEEEE
« Antwort #12 am: 12.01.2007 | 01:28 »
Weil sich dann die beiden schlagworte ausschliessen...ja ich weiss...macht keinen sinn...is aber so ;)


Offline Crujach

  • Boobs-Consultant
  • Legend
  • *******
  • Beiträge: 6.793
  • Geschlecht: Männlich
  • Username: Crujach
Re: [SQL] HILFEEEEEEEEEE
« Antwort #13 am: 12.01.2007 | 13:04 »
ok - danke für die Info :)