Habe jetzt auch die anderen beiden Aufgaben korriegiert die ich falsch hatte. Die waren aber net weiter schwer werde sie aber trotzdem mal posten, vielleicht fällt jemanden ein Fehler auf etc...
Beide Aufgaben sollten aber meiner Meinung nach jetzt korrekt sein ^^ aber man weiss ja nie...
1.Ausgabe der Benutzernr aller Benutzer die ein Buch ausgeliehen haben, für die eine Vormerkung
existiert sowie die ISBN des betroffenen Buchs. Dabei soll jedes Exemplar höchstens einmal
ausgegeben werden.
Lösung:
SELECT DISTINCT benutzernr, isbn FROM Ausleihe
WHERE Vormerkung.exemplarisbn=Ausleihe.exemplarisbn;
2.Ausgabe von Ausleihtag und ISBN aller ausgeliehenen Bücher vom Benutzer mit der Nummer 1:
Lösung:
SELECT tag, isbn FROM Ausleihe
WHERE Ausleihe.benutzernr = '1' ;
Ich denke mal das dass so richtig ist, aber ich geh mal lieber auf Nummer.
Ergebnis 11 bis 20 von 20
Thema: Brauche Hilfe bei mySQL
-
24.07.2008, 17:57 #11
Registrierter Benutzer
- Registriert seit
- 07 2008
- Beiträge
- 9
-
25.07.2008, 09:06 #12
Moderator
- Registriert seit
- 12 2007
- Ort
- Südpfalz
- Beiträge
- 1.307
ist falsch - schau mal, du verwendest bei 1) zwei Tabellen, nämlich Ausleihe und Vormerkung - deine From-Klausel umfasst aber nur Ausleihe. Wo ist der Join auf Vormerkung?
Die Frage ist unklar formuliert... alle Benutzer, für die beides gleichzeitig zutrifft? (also vormerkung UND ausleihe?) Oder Nutzer, für die entweder das eine, oder das andere gilt? ODER sollen die Bücher ausgegeben werden, dann ggf. mit den Benutzern, die sie geliehen oder vorgemerkt haben? Ist total schwammig, diese Angabe.
Ich gebe dir mal ein Beispiel, das alle Benutzer mit ihren Büchern listet - und dem vermerk, ob es ausgeliehen ist oder eine vormerkung hat:
Das ergäbe folgende Liste:Code:select Benutzer.Nummer as BeNr, Benutzer.Name as BeName, Exemplar.Titel as Buch, Buecher.Aktion from Benutzer inner join (select Ausleihe.Benutzernr as BNR, Ausleihe.exemplarisbn as ISBN, 'ausgeliehen' as Aktion from Ausleihe UNION select Vormerkung.benutzernr as BNR, Vormerkung.exemplarisbn as ISBN, 'vorgemerkt' as Aktion from Vormerkung ) as Buecher inner join Exemplar on Exemplar.isbn = Buecher.ISBN order by Benutzer.Nummer, Exemplar.ISBN
Was Aufgabe 2 angeht: FAST richtig. Nur ein Fehler:Code:BeNr | BeName | Buch | Aktion -----|----------|------------------------|------------ 1 | Bartusch | Java is auch ein Insel | vorgemerkt -----|----------|------------------------|------------ 1 | Bartusch | UML 2 kompakt | ausgeliehen -----|----------|------------------------|------------ 2 | Lehmann | Java-Programmieren... | vorgemerkt -----|----------|------------------------|------------ 2 | Lehmann | UML 2 kompakt | vorgemerkt -----|----------|------------------------|------------ 3 | Kohlack | Java is auch ein Insel | ausgeliehen -----|----------|------------------------|------------ 3 | Kohlack | Java-Programmieren... | ausgeliehen -----|----------|------------------------|------------ 3 | Kohlack | UML 2 kompakt | vorgemerkt
Das ist falsch - in Hochkommata setzt man CHAR-Werte (wie Namen), KEINE Zahlen! Die Benutzernummer ist ein Integer-Wert, also eine Ganzzahl. Korrekt ist daherCode:WHERE Ausleihe.Benutzernr = '1'
OHNE die '' um die 1 herum!Code:WHERE Ausleihe.Benutzernr = 1
=========================
Generelle Empfehlung
=========================
Ja, ich weiß, Joins können total nervend sein, weil sie eine gewisse Komplexität haben - aber setzt dich damit noch einmal auseinander. Dringend.
Lerne den Unterschied zwischen INNER JOIN und LEFT JOIN - das sind die beiden wichtigen. (Der RIGHT JOIN ist nicht praxisrelevant, da er durch einen LEFT JOIN ersetzt werden kann; ein Full Outer Join ist auch höchst fragwürdig, da du in der Praxis nur sehr, sehr selten ein kartesisches Produkt brauchst.)
Mach dir die Arbeitsweise klar. Und bevor du einen Select schreibst, überlege:
- Welche Daten brauche ich?
- Aus welcher Tabelle kommt welches Feld, ergo: Welche Tabellen brauche ich?
- Wie kann ich diese Tabellen sinnvoll miteinander verknüpfen?
- Welche der Tabellen enthält "optionale" Daten (aka: LEFT JOIN), welche essentiellen? (INNER JOIN)
Lies deine Sachen nochmal gründlich durch.
Oh, und frag bei unklaren Fragestellungen nach; Aufgabe 1 ist zum Beispiel völlig unklar. Wenn sich die ISBN innerhalb des Benutzers nicht wiederholen darf, ist das ohnehin Quark, alldieweil: Ein Benutzer kann ein Buch NICHT 2-mal gleichzeitig geliehen haben. Er kann es auch nicht gleichzeitig in der Ausleihe UND in der Vormerkung haben.
Falls das doch möglich wäre, umfasst der Subselect einen weiteren Subselect - da wird der UNION dann eine Ebene tiefer gelegt und im ersten Subselect mit einem Group By gearbeitet; über geschickte min/max-Anwendungen kann man dann schön differenzieren ;-)Beste Grüße,
WITM55
sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)
Code:BOFH Excuse #227: Fatal error right in front of screen.
-
25.07.2008, 09:30 #13
[spam - sinnfrei]
tjoar und somit is die vewirrung für jeden nicht MySQL freak komplett
[/spam - sinnfrei]Soo genau muss eine Fehlerbeschreibung gar nicht sein.
Dank unserer übersinnlichen Fähigkeiten reicht ein einfaches "Es geht net." vollkommen aus.
Parapsychologie ist was feines...
Chaos ist nur eine Form der Ordnung die wir verlernt haben.
-
25.07.2008, 09:53 #14
Registrierter Benutzer
- Registriert seit
- 07 2008
- Beiträge
- 9
mal wieder danke an deine Hilfe ^^
also habe 2. verbessert wegen den strichen.
bei 1.
SELECT DISTINCT benutzernr, isbn FROM Ausleihe
WHERE Vormerkung.exemplarisbn=Ausleihe.exemplarisbn;
die FROM Anweisunf geht nur in Ausleihe da ja nur die Benutzernr und die ISBN ausgegeben werden soll. Bei der WHERE Bedingung schreib ich ja dazu welche exemplarisbn miteinander verglichen werden soll. also die aus Vormerkung und die aus Ausleihe : Ausleihe.exemplarisbn. Somit bin ich ja dann in der Ausleihe. ich habs ja davor geschrieben. Wenn ich mich irre dann korriegiere mich.
Man könnte das ganze ja auch so schreiben:
SELECT DISTINCT Ausleihe.benutzernr, Ausleihe.isbn FROM Ausleihe, Vormerkung
WHERE Vormerkung.exemplarisbn=Ausleihe.exemplarisbn;
wäre das so besser? Ist ja eigentlich meiner Meinung nach nichts anderes als was ich gemacht habe oder?
-
25.07.2008, 09:56 #15
Moderator
- Registriert seit
- 12 2007
- Ort
- Südpfalz
- Beiträge
- 1.307
Hehe, das sagst du - ich würde ja mal ein Praxisbeispiel aus meiner täglichen Arbeit posten. Ich befürchte nur einfach, dass das Forum hier nicht so viele Zeichen für einen Beitrag zulässt - aber einen Versuch wäre es wert. Wenn du dich mal wirklich völlig verwirren lassen willst

State of maximum Confussion: established
Mission: accomplishedBeste Grüße,
WITM55
sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)
Code:BOFH Excuse #227: Fatal error right in front of screen.
-
25.07.2008, 10:01 #16
Moderator
- Registriert seit
- 12 2007
- Ort
- Südpfalz
- Beiträge
- 1.307
@Miller:
Deine Nummer 1 führt zu einem Fehler.... Du verwendest in der WHERE-Klausel ein Feld aus Vormerkung, DASS ER NICHT KENNT! Er arbeitet NUR mit den Daten aus den Tabellen, die er kennt. Und er kennt nur die Felder aus AUSLEIHE, weil Vormerkung nicht in der From-Klausel ist. Das gehört also rein.
Darüberhinaus ist eine Verknüpfung von Ausleihe zu Vormerkung über ISBN _eigentlich_ Quark.
Warum? Ganz einfach:
Du bekommst so nur Bücher, die in beiden Tabellen mindestens einmal vorkommen. Nehmen wir an, wir hätten das Buch "MySQL für Anfänger", für das es eine Vormerkung, aber keine Ausleihe gibt. Würde es auf deiner Liste erscheinen? Antwort: NEIN!
Denn mit "Ausleihe.ISBN = Vormerkung.ISBN" findest du nur noch Bücher, die in beiden Tabellen vorkommen (das IST ein INNER JOIN).
Und nochmal: Alle Felder, die du verwenden willst - egal ob im SELECT oder in der WHERE-Klause - MÜSSEN in den Tabellen stehen, die in der FROM-Klausel und den Joins genannt werden.
Es ist egal, ob der Select nur Felder aus einer Tabelle umfasst - scheißegal! Wichtig ist, welche Felder du verwendest - und dazu gehören die "sichtbaren", die über Select ausgegeben werden, genauso wie die "unsichtbaren", die "nur" zur Berechnung oder in einem Filter (aka WHERE) verwendet werden. Du kannst nur auf Felder zugreifen, die der Datenbankserver kennt; und dazu muss er wissen, in welchen Tabellen er gucken soll. Und das erfährt er NUR über FROM!
EDITH sagt:
Die Angabe "FROM TabelleA, TabelleB" ist - in dieser Form isoliert betrachtet - zuerst mal ein Full Outer Join, also ein kartesisches Produkt. Es wird dann dadurch eingeschränkt, dass man - mittels WHERE - die Verknüpfungsbedingungen angibt (WHERE TabelleA.PrimaryKey = TabelleB.ForeignKey).
Das KANN man tun, und es ist Old School. Soll heißen: Es ist Schwachsinn, weil sich dann in deiner WHERE-Klausel die Verknüfpungsbedingungen mit den "echten" Filterbedingungen (WHERE Kunde.Alter between 18 and 25) vermischen und gar nicht mehr richtig klar ist auf den ersten Blick, was Filter, was Verknüpfung ist.
Sauberer ist es daher, die Tabellen zu Joinen.
FROM TabelleA INNER JOIN TabelleB ON TabelleA.PrimaryKey = TabelleB.ForeignKey
So ist auf einen Blick ersichtlich, WIE die Tabellen verknüpft sind.Geändert von WITM55 (25.07.2008 um 10:06 Uhr)
Beste Grüße,
WITM55
sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)
Code:BOFH Excuse #227: Fatal error right in front of screen.
-
25.07.2008, 10:08 #17
Registrierter Benutzer
- Registriert seit
- 07 2008
- Beiträge
- 9
ok jetzt habe ich es geschnallt. Tut mir leid das ich dir soviel arbeit mache aber ich arbeite mit SQL erst seit ca 1 woche...
ich werd es ändern. Und nochmals Danke für deine Geduld mit mir
ich denke mal der Thread kann dann geschlossen werden.
-
25.07.2008, 10:40 #18
Moderator
- Registriert seit
- 12 2007
- Ort
- Südpfalz
- Beiträge
- 1.307
Ahhh, okay, ich sehe schon... 1 Woche...
Geduld du haben musst, junger Padawan; nicht leicht die Macht kommt!
Und wenn du noch Fragen hast - meld dich! Über meine Sig findest du meinen E-Mail-Schlüssel (und über den wiederum auch die E-Mail-Adresse). Wenn nicht schick hier eine PN, dann lass ich dir meine Mail-Adresse zukommen.
P.S.: Ich helf gern, wenn ich kann - freut mich, wenn es dir auch was gebracht hat ;-)Geändert von WITM55 (25.07.2008 um 10:46 Uhr)
Beste Grüße,
WITM55
sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)
Code:BOFH Excuse #227: Fatal error right in front of screen.
-
31.07.2008, 21:22 #19
Registrierter Benutzer
- Registriert seit
- 07 2008
- Beiträge
- 9
So habe heute endlich die Auswertung bekommen und alles ist richtig. Habe auch das geschrieben wegen der resttage berechnung so wie du meintes WITM55...der Leiter hat sich mehrmals dafür entschuldigt und konnte sich auch nicht erklären warum er mir so ein Kommentar dazu geschrieben hat. Es war ihm ziemlich peinlich ....... ^^
Nochmal ein grosses danke für die Hilfe. Werde mich vielleicht nochmal per Mail an dich wenden wenn ich Fragen hab, aber die Prüfung ist gottseidank erst in 2 Monaten so dass ich bis dahin wohl fit bin in Sachen SQL. somit kann der Thread hier denke ich mal geclosed werden.
MFG
Miller
-
01.08.2008, 09:07 #20
Moderator
- Registriert seit
- 12 2007
- Ort
- Südpfalz
- Beiträge
- 1.307
Hehehe... ich hab schon in der Schule gerne die Lehrer verbessert. (Boah, ich muss ein furchtbarer Schüler gewesen sein, wenn ich so drüber nachdenke...)
Wie gesagt, gern geschehen. Meld dich ggf. einfach per Mail ;-)
So, und jetzt viel Spaß beim Lernen - und vorab schon mal Toi, Toi, Toi für die Prüfung!Beste Grüße,
WITM55
sicherer E-Mail-Kontakt: Über den Schlüssel 3DE6FF44 (zum Beispiel über Server http://wwwkeys.de.pgp.net/ mit dem Suchstring 0x3DE6FF44 zu beziehen)
Code:BOFH Excuse #227: Fatal error right in front of screen.
Aktive Benutzer
Aktive Benutzer
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Ähnliche Themen
-
Brauche Dringend Hilfe
Von samy8 im Forum KomponentenAntworten: 5Letzter Beitrag: 23.08.2007, 05:50 -
Brauche dringend Hilfe
Von Moon33 im Forum MobilesAntworten: 5Letzter Beitrag: 08.08.2006, 18:09 -
Brauche dringend Hilfe !!
Von bebob im Forum CPU & RAMAntworten: 4Letzter Beitrag: 06.12.2005, 16:43 -
Brauche dringend Hilfe!!
Von brixx im Forum Windows ClientsAntworten: 1Letzter Beitrag: 28.02.2005, 17:00 -
UNMOUNTABLE_BOOT_VOLUME?? Brauche Hilfe
Von andy-b23 im Forum StorageAntworten: 1Letzter Beitrag: 21.09.2003, 10:33





Zitieren



Lesezeichen