SQL-Anfrage JOIN vs UNION ?
-
Hallo,
kann mir jemand erklären inwiefern sich das Ergebis meiner Lösung dieser SQL-Anfrage von dem Ergebnis der Musterlösung unterscheiden würde? Sind vll. sogar beide richtig?Hab jetzt eine Weile darüber gegrübelt und wüsste nicht warum ich hier nicht zu einem JOIN über alle Tabellen greifen sollte .
Danke!
Datenbank-Schema:
Produkt (hersteller, modell, typ)
PC (modell, speed, ram, hd, cd, preis)
Laptop (modell, speed, ram, hd, bildschirm, preis)
Drucker (modell, farbe, typ, preis)Fragestellung:
Wie lauten Modellnummern und Preis aller Produkte, die Hersteller B herstellt?Meine "Lösung":
SELECT Produkt.modell, preis
FROM Produkt, Laptop, Drucker, PC
WHERE hersteller = 'B'
AND Produkt.modell = Laptop.modell
AND Produkt.modell = Drucker.modell
AND Produkt.modell = PC.modellMusterlösung:
(SELECT Produkt.modell, preis
FROM Produkt, PC
WHERE hersteller ='B'
AND Produkt.modell = PC.modell)UNION
(SELECT Produkt.modell, preis
FROM Produkt, Laptop
WHERE hersteller ='B'
AND Produkt.modell = Laptop.modell)UNION
(SELECT Produkt.modell, preis
FROM Produkt, Drucker
WHERE hersteller ='B'
AND Produkt.modell = Drucker.modell)
-
Produkt.modell ist irgendeine Produkt-ID nehme ich an?
Wie soll denn dann das hier je zutreffen?
AND Produkt.modell = Laptop.modell AND Produkt.modell = Drucker.modell AND Produkt.modell = PC.modell
Und woher soll dein DBMS wissen, was du mit "preis" meinst?
-
Ok... mir ist gerade ein Licht aufgegangen
Ich hatte immer den Gedanken im Kopf die Tabellen einfach nur "verknüpfen" zu wollen, um gesammelt darauf zugreifen zu können. Was hier natürlich totaler Schwachsinn ist... da PC, Laptop, Drucker sich gegenseitig ausschließen.
Hinzu kommt noch die Sache mit dem Preis.
Dank dir... muss echt blind gewesen sein...
-
Habe schon wesentlich dümmere Fragen gesehen, das hier ist ein ziemlich typischer SQL-Anfängerfehler. Wenn man sich noch nicht ganz an SQL gewöhnt hat stolpert man leicht über sowas; wirklich kein dramatischer Blindheitsfall also.