2012-03-01 19 views
0

特定のジャンルの上位25のgame_idを表示するクエリを作成する必要があります。 データベースのテーブルには、ここでSQLテーブル内の2つのレコードに基づいて1つのテーブルからレコードをフェッチするクエリ

| id | genre_id | game_id | is_primary | 
---------------------------------------- 
    1 6000  12345  0 
    2 6007  12345  1 
    3 6000  23492  0 
    4 6007  82837  1 
---------------------------------------- 

のようなものです、あなたはそのレコード1と2はis_primary = 0と1の私は何を持っていることは私と一緒にgenre_idと私の両方を持つクエリを実行することで、両方に同じgame_idを持って見ることができます両方に該当するgame_idを取得する必要があります。 is_primary = 1で、genre_idに6000、is_primary = 0、genre_idに6007のgame_idを意味します。

ネットで検索されましたが、成功しませんでした。

私はこのクエリ

SELECT game_id FROM table_name WHERE 
(SELECT game_id FROM table_name WHERE genre_id=6000 AND is_primary=0) 
AND ganre_id=6007 AND is_primary=1; 

を試してみました。しかし、このクエリはSubquery returns more than one valueとしてエラーを与えています。

答えて

1

SELECT game_id FROM table_name WHERE game_id IN(SELECT game_id FROM table_name WHERE genre_id=6000 AND is_primary=0) 
AND (ganre_id=6007 AND is_primary=1); 
+0

ねえおかげでたくさん!それはとても簡単で、もっと複雑な方法で試していました。上記のクエリもORの代わりにANDを使って試してみました。 – Astha

+0

あなたを助けてくれる歓迎です –

1

JOIN performs much better than subqueries(更新)この文字列で検索してください:

SELECT t1.game_id 
FROM table_name t1 
JOIN table_name t2 ON (t1.game_id = t2.game_id AND t2.genre_id = 6000 AND t2.is_primary = 0) 
WHERE (t1.genre_id = 6007 AND t1.is_primary = 1) 
関連する問題