2012-03-01 92 views
0

我必须编写一个查询,它将显示特定流派下的前25个game_id。 数据库表就像SQL Query基于表中的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具有相同的game_id两个is_primary = 0和1。我所要做的就是执行既有与我和我的genre_id查询必须获取属于两者的game_id。具有6000作为genre_id和is_primary = 0并且6007作为genre_id并且is_primary = 1的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

嘿非常感谢!这很容易,我试图从更复杂的方式。我也尝试过使用上面的查询,但使用AND而不是OR。 – Astha 2012-03-01 05:20:45

+0

欢迎您前去帮助您 – 2012-03-01 05:30:14

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) 
相关问题