作者smlboby (波比)
看板Database
标题Re: [SQL ] 如何找两笔或以上的资料
时间Fri Oct 11 19:13:56 2013
以下为 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')
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)