1

多対多のクエリについて教えてください。

MS Access 2010 で構築された ACE データベースがあります。次のテーブルがあります。

Flags
flagID      flagName                country
1           Stars and Stripes       USA
2           French Tricolour        France
3           The Yellow and Blue     Sweden
4           Union Jack              UK
5           Jolly Roger             Pirates
6           Trinacria               Sicily

Colours
colourID    colour
1           Red
2           Blue
3           White
4           Black
5           Yellow

Juntion
JID         fkFlags     fkColours
For brevity, I’ll omit the field values from the Junction table.

テーブルをクエリすると

SELECT Flags.flagName, Flags.country, Colours.colour
FROM Flags INNER JOIN
                 (Colours INNER JOIN Juntion ON Colours.colourID = Juntion.fkColours)
                 ON Flags.flagID = Juntion.fkFlags
WHERE Flags.flagName = 'Jolly Roger' OR Flags.flagName = 'Stars and Stripes';

私の結果は私が期待するものです。

flagName            country     colour                                       
Stars and Stripes   USA         Red                         
Stars and Stripes   USA         White                       
Stars and Stripes   USA         Blue                        
Jolly Roger         Pirate      Black                       
Jolly Roger         Pirate      White    

同様に、テーブルをクエリすると

SELECT Flags.flagName, Flags.country, Colours.colour
FROM Flags INNER JOIN (Colours INNER JOIN Juntion ON Colours.colourID =   Juntion.fkColours) 
ON Flags.flagID = Juntion.fkFlags
WHERE Colours.Colour IN ((
                      SELECT C.colour
                      FROM Flags INNER JOIN (Colours C INNER JOIN Juntion ON C.colourID = Juntion.fkColours)
                      ON Flags.flagID = Juntion.fkFlags
                      WHERE (c.Colour = 'White')
                      ))
OR Colours.Colour IN ((
                      SELECT C.colour
                      FROM Flags INNER JOIN (Colours C INNER JOIN Juntion ON C.colourID = Juntion.fkColours)
                      ON Flags.flagID = Juntion.fkFlags
                      WHERE (c.Colour = 'Blue')
                      ))

私の結果は私が期待するものです。

flagName            country colour
Stars and Stripes   USA     White                       
Stars and Stripes   USA     Blue                        
The Yellow and Blue Sweden  Blue                        
Jolly Roger         Pirate  White                       
French Tricolor     France  Blue                        
French Tricolor     France  White                       
Union Jack          UK      White                       
Union Jack          UK      Blue

ただし、私が本当に望んでいるのは、color = Red、White AND Blue のすべての flagNames の結果を取得することです。

Stars and Stripes
French Tricolour
Union Jack

また、'Stars and Stripes' と 'Jolly Roger' の flagNames を考えると、それらは何色を共有していますか?

White

上記の最後のクエリの例で、OR を AND に変更すると、結果はまったく返されません。それらのクエリを書くのを手伝ってもらえますか?

御時間ありがとうございます。

4

1 に答える 1