2010-02-19 101 views
0

我想选择游戏,知道如何有效地运行一个查询,如:如何查询:在类A,B和C

select game from Game game 
inner join game.Categories cat 
where cat.Name in ('A', 'B') 

这给了我与类别一个乙游戏。但是我想要的游戏是A类的B类。这是用于HQL(NHibernate查询语言),但我也想知道如何在SQL上做到这一点。

回答

1

假设MySQL

SELECT g.* 
FROM game g 
WHERE EXISTS 
     (
     SELECT NULL 
     FROM categories c 
     WHERE c.name IN ('A', 'B') 
       AND c.game = g.id 
     LIMIT 1 OFFSET 1 
     ) 

OFFSET值应在IN列表减去1项目的数量,也就是说,如果你查询('A', 'B', 'C')那么你应该使用OFFSET 2等。

+0

+1 - 尼斯解决方案。我从来没有想过这样做。 – 2010-02-19 17:57:29

0

这里的SQL(假定T-SQL):

/* Defining my own schema... */ 
declare @games table 
(
GameID int, Game varchar(20) 
) 

declare @gameCategories table 
(
GameID int, Category char(1) 
) 

insert into @games values (1, 'Risk') 
insert into @games values (2, 'Spades') 
insert into @games values (3, 'Cribbage') 

insert into @gameCategories values (1, 'B') 
insert into @gameCategories values (2, 'C') 
insert into @gameCategories values (3, 'C') 
insert into @gameCategories values (3, 'B') 

select g.Game 
from @games g 
inner join @gameCategories b on g.GameID = b.GameID and b.Category = 'B' 
inner join @gameCategories c on g.GameID = c.GameID and c.Category = 'C' 
相关问题