少し精神的なもつれがあり、これは想像以上に簡単だと思います。次のテーブルを取得しました。
create table #x
(
handid int,
cardid int
)
insert into #x
values
(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),
(2,2),(2,3),(2,4),(2,300),(2,400),(2,500),(2,8),
(3,2),(3,3),(3,4),(3,300),(3,400),(3,7),(3,8),
(4,2),(4,300),(4,400),(4,500),(4,6),(4,7),(4,8)
create table #winners(cardid int)
insert into #winners values(300),(400),(500)
select a.*
from
#x a
inner join #winners b
on
a.cardid = b.cardid
これは以下を返します。
の 3 つの s がすべて存在する場合にのみ、このクエリで行が返されるようにします。したがって、目的の結果セットには3 が含まれません。cardid
handid
handid
これは現実のモデルです。実際には、#x には 500 のミル レコードが含まれています。
編集
わかりました-実際には、可変数のレコードを持つデータセットで構成される勝者がいます。したがって、元のコードを次のように修正すると、結果セットに1 または3#winners
が含まれてはなりません。また、結果セットに不要な重複レコードがいくつか含まれています。handId
handId
create table #x
(
handid int,
cardid int
)
insert into #x
values
(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8000),
(2,2),(2,3),(2,4),(2,300),(2,400),(2,500),(2,8),
(3,2),(3,3),(3,4),(3,300),(3,400),(3,7),(3,8),
(4,2),(4,300),(4,400),(4,500),(4,6),(4,7),(4,8)
create table #winners(winningComb char(1), cardid int)
insert into #winners values('A',300),('A',400),('A',500),('B',8000),('B',400)
select a.*
from
#x a
inner join #winners b
on
a.cardid = b.cardid