Lösningen är en rekursiv join, dvs. att man joinar tabellen med sig själv. Det kräver att man skapar flera alias av tabellen, så att "joinen" utförs som om de vore flera unika tabeller. Jag har lagt till en primärnyckel till tabOrderArt (ID) för att kunna göra en distinct.
Först bestämmer vi vilka kolumner och tabellalias som ska vara med...
SELECT DISTINCT T1.ID, T1.OrderID, T1.ArtID
FROM tabOrderArt AS T1, tabOrderArt AS T2, tabOrderArt AS T3, tabArt AS A1, tabArt AS A2
Vi joinar tabellerna mot varandra, rekursivt.
WHERE T1.OrderID=T2.OrderID And T1.OrderID=T3.OrderID
Sedan kopplas tabOrderArt och tabArt ihop (ger samma resultat som en INNER JOIN)
And T2.ArtID=A1.ArtID And T3.ArtID=A2.ArtID
Underkategorierna måste stämma, och eftersom det är två kategorier som ska matcha måste vi ha två alias av tabArt.
And A1.UnderKatID=4 And A2.UnderKatID=9
Slutligen kräver vi att OrderID har ett visst värde. Utan detta listas alla ordrar som uppfyller kraven.
And T1.OrderID=1050;
Slutresultat:
SELECT DISTINCT T1.ID, T1.OrderID, T1.ArtID
FROM tabOrderArt AS T1, tabOrderArt AS T2, tabOrderArt AS T3, tabArt AS A1, tabArt AS A2
WHERE T1.OrderID=T2.OrderID And T1.OrderID=T3.OrderID
And T2.ArtID=A1.ArtID And T3.ArtID=A2.ArtID
And A1.UnderKatID=4 And A2.UnderKatID=9
And T1.OrderID=1050;
[Redigerat av emission den 09 jun 2000]