作者whatsAcc (whatsAcc)
站内Database
标题Re: [SQL ] 如何找两笔或以上的资料
时间Sat Oct 12 02:59:00 2013
※ 引述《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这样的概念
: 资料可能会有上百万笔
: 非常谢谢您的指教
这是取 TABLE A 名单内所有人之间的交集
select TEAM_ID
from B
where exists (
-- range scan
select 1
from A
where PERSON_ID = B.PERSON_ID )
group by TEAM_ID
having count(PERSON_ID) = 2
-- 共同组的人数 = 参与交集的总人数
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.36.7.176
※ 编辑: whatsAcc 来自: 114.36.7.176 (10/12 03:30)