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上做到这一点。
我想选择游戏,知道如何有效地运行一个查询,如:如何查询:在类A,B和C
select game from Game game
inner join game.Categories cat
where cat.Name in ('A', 'B')
这给了我与类别一个或乙游戏。但是我想要的游戏是A类和的B类。这是用于HQL(NHibernate查询语言),但我也想知道如何在SQL上做到这一点。
假设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
等。
这里的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'
+1 - 尼斯解决方案。我从来没有想过这样做。 – 2010-02-19 17:57:29