2017-10-28 1 views
0

要素xとyの両方を持つすべての値を別の表から選択する方法を教えてください。 アクションと戦略ジャンルを持つすべてのゲームを選択したいとします。あるゲームテーブルでは、私はgameid、gametitleを持っています。他のgamegenreにはgameid、gamegenreがあります。私はそれらをgameidで接続します。SQL xとyの両方の要素ですべての値を選択

SELECT g.gameid, gg.genre 
FROM games g 
NATURAL JOIN gamegenre gg 
WHERE gg.genre = 'Action' 
And gg.genre = 'Strategy'; 

なぜこのコードでは、ジャンルのゲームのみを選択しますか?そして私はそれをどのように修正できますか?

答えて

0

まず、natural joinを忘れてください。これは正しく宣言された外部キーの関係を使用しないため、偽物です。ほとんどの場合、私のテーブルにはCreatedAtCreatedByのカラムがあるため、同じ名前のカラムが使用されます(作成するテーブルでは無用です)。非特定の名前を使用するのは危険です。何かが間違ってしまうと、それは明らかではありません。 またはusingのいずれかを使用してjoinに使用されている列を列挙します。

第2に、genreは2つの値を同時に持つことができないため、すべての行がフィルタリングされます。

第3に、あなたはgroup byhavingとすることができます。重複がないと仮定します。

SELECT gameid 
FROM games g INNER JOIN 
    gamegenre gg 
    ON (gameid) 
WHERE gg.genre IN ('Action', 'Strategy') 
GROUP BY gameid 
HAVING COUNT(*) = 2; 
+0

大変ありがとうございます。ええ、私はほとんどの場合、INNER JOINを使用します。ちょっとここで少し怠けています:D –

関連する問題