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.modell

    Musterlö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.


Anmelden zum Antworten