Hej, jag har en relation som ser ut som följande:
http://www.datorpulsen.se/other/relation.jpg
Jag vill få ut namnet på alla personer (tabell Person) som har bott i samtliga hotell (tabell Hotell) på en viss ort. Tex: om det finns 2 hotell i Berlin vill jag hämta namnen på de som har bott i båda hotellen. Vilken ort det rör sig om är förbestämt (se mitt exempel längre ner, där jag valde berlin).
Vet inte om det är till någon hjälp men samtliga nycklar är int värden och ort är en sträng.
Jag har visserligen fått resultatet jag vill ha med följande SQL-sats:
SELECT resande.person
FROM (SELECT COUNT(hotellid) AS maxAntal, Hotell.ort AS ort FROM Hotell GROUP BY Hotell.ort) AS [max], (SELECT DISTINCT Person.namn AS person, COUNT(Hotell.hotellid) AS antal, Hotell.ort AS ort
FROM Hotell INNER JOIN (Person INNER JOIN (Medresenär INNER JOIN HotellBokning ON Medresenär.bokningsnummer = HotellBokning.bokningsnr) ON Person.personnr = Medresenär.personnr) ON Hotell.hotellid = HotellBokning.hotellid
WHERE (((Hotell.ort)='Berlin')) GROUP BY Person.namn, Hotell.ort) AS resande
WHERE (((max.maxAntal)=[resande].[antal]) AND ((max.ort)=[resande].[ort]));
men den är för krånglig och det ska tydligen finnas ett lättare sätt. Vad den gör är att den räknar antalet hotell som finns på den angivna orten (i det här fallet 'Berlin') och sen jämför den med antalet (unika) hotell personerna har bott i. Om båda värden är den samma så betyder det att de har bott i samtliga hotell i den staden.
SQL-satsen ska funka i Access och MySQL.
Någon som kan hjälpa mig med det?
Tack i förväg.