2010-02-19 105 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' 
相關問題