select gid
from @t2
group by gid
having sum(case when sid in ('A','B','C') then 1 else -1 end) = 3
^^^^^^^^^^^ 要查的 PERSON_ID ^ 要查的筆數
※ 引述《ClubT (風)》之銘言:
: ※ 引述《greencha (greencha)》之銘言:
: : 各位大哥大姐好, 小弟有一問題求教
: : 假設我在TABLE A, 有以下兩筆資料, 假設叫 PERSON_ID
: : PERSON_ID PERSON_NAME
: : 1001 小明
: : 1002 小華
: : TABLE B中, 有各分組的資料
: : TEAM_ID PERSON_ID
: : 1 1000
: : 1 1001
: : 2 1001 *
: : 2 1002 *
: : 3 1001
: : 3 1002
: : 3 1003
: : 3 1004
: : 很明顯的, 我最後想要的結果是
: : 只有小明和小華同組的 TEAM_ID是2
: : 我想找到這個2, 要如何以比較單純的方法處理 (in Oracle)
: : 單純的意思也是效能要好, 最好不要有FULL TABLE SCAN這樣的概念
: : 資料可能會有上百萬筆
: : 非常謝謝您的指教
: 如果你要找的TEAM只會有2個人的話
: select TEAM_ID from TableB group by TEAM_ID having count(*)=2 and
: Min(PERSON_ID)=1001 and Max(PERSON_ID)=1002
: 雖然不確定Oracle的語法是不是這樣...但應該差不多
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.120.164
※ 編輯: smlboby 來自: 115.43.120.164 (10/11 19:16)
以下為 T-SQL
declare @t1 table
(
sid varchar(1),
sname varchar(20)
)
declare @t2 table
(
gid int,
sid varchar(1)
)
insert into @t1 values ('A','David')
insert into @t1 values ('B','Scott')
insert into @t1 values ('C','Marry')
insert into @t2 values (1,'A')
insert into @t2 values (2,'A')
insert into @t2 values (2,'B')
insert into @t2 values (3,'A')
insert into @t2 values (3,'B')
insert into @t2 values (3,'C')
insert into @t2 values (4,'B')
insert into @t2 values (4,'C')