[MYSQL] Formulierung einer Abfrage

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Hallo zusammen,
ich stehe gerade irgendwie vollkommen auf dem Schlauch!

Ich bearbeite gerade eine Staatsexamensaufgabe in Informatik (Bayern) aus dem Jahre 1996 und komme irgendwie nicht auf die Lösung einer eigentlich einfachen Abfrage. Es geht konkret um die Aufgabe 4 Teilaufgabe 4 hier auf Seite 72. Ich habe sie noch mal als Screenshot angehängt (die allerletzte Frage auf dem Screenshot).
Mit
Code:
SELECT DISTINCT h.hersteller
FROM Hersteller h, Modelle m
WHERE m.mnr IN (
    SELECT mnr
    FROM Fahrzeuge
)
bekomme ich ja nur alle Hersteller, für die wenigstens ein Auto im Lager ist. Ich brauche aber eine Abfrage, die nur die Hersteller liefert, für die von allen Modelle wenigstens ein Exemplar im Lager vorhanden ist. Zumindest verstehe ich die Aufgabe so und es muss ja so oder so machbar sein... aber ich komme gerade seit zwei Stunden nicht drauf :p Die Leitung ist einfach zu lange ;)
 

Anhänge

  • Bildschirmfoto 2014-03-03 um 18.36.29.png
    Bildschirmfoto 2014-03-03 um 18.36.29.png
    205,9 KB · Aufrufe: 150

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Keiner hier, der mir vielleicht wenigstens einen Tipp geben könnte?
 

k4l4m

Erdapfel
Registriert
03.03.14
Beiträge
3
HI,

so auf die schnelle hab ich den Query mal hingezaubert. Sollte bestimmt noch kürzer gehen.

Code:
SELECT Hersteller.hnr, COUNT(Modelle.mnr) as anzahl
FROM Hersteller
NATURAL JOIN Modelle
GROUP BY Hersteller.hnr
HAVING anzahl IN
(
   SELECT COUNT(*) FROM
   (SELECT DISTINCT mnr
   FROM  `Fahrzeuge` ) as f
   NATURAL JOIN Modelle NATURAL JOIN Hersteller
   GROUP BY Hersteller.hnr
)

Seh grad das er eine Tabelle mit der Hersteller.hnr mit anzahl zurückgibt. Kannst ja entweder noch nen Select draufhauen oder Hersteller.hnr in Hersteller.hersteller umbenennen.
 
  • Like
Reaktionen: C64

C64

Kaiser Alexander
Registriert
12.04.06
Beiträge
3.957
Wow danke! Das funktioniert sehr gut!
Ich hing aktuell hier:
Code:
SELECT
    hersteller
FROM
    Hersteller h
INNER JOIN
    Modelle mo
ON mo.hnr = h.hnr
WHERE
    COUNT(*) = (
        SELECT
            COUNT(DISTINCT f.mnr)
        FROM
            Fahrzeuge f
        INNER JOIN
            Modelle m
        ON m.mnr = f.mnr
        ___WHERE h.hnr = m.hnr___
        GROUP BY
            m.hnr
    )
GROUP BY
    hersteller

Aber da macht mir die innere WHERE-Klausel natürlich Probleme, da h.hnr erst in der äußeren Abfrage definiert wird...
 

k4l4m

Erdapfel
Registriert
03.03.14
Beiträge
3
Die INNER JOINS mit der jeweiligen Gleichsetzung von x.mnr = y.mnr kannst de einfacher mit einem NATURAL JOIN lösen. Das Problem bei deinem Query sollte auch dieser Bereich sein:
Code:
WHERE COUNT(*) = ()
da du versuchst eine Zahl mit einer Relation zu vergleichen.

Hauptsache mein Query hat dir ein wenig geholfen :)