外部主题小组
x.get_shape()[0]
内部学科组
| pk | group_id | subid |
|----|----------|-------|
| 1 | 1 | s1 |
| 2 | 1 | s2 |
| 3 | 1 | s3 |
| 4 | 2 | x1 |
| 5 | 2 | x2 |
| 6 | 3 | y1 |
| 7 | 3 | y2 |
| 8 | 3 | y3 |
我目前正在使用php和sql(oracle)。例如, 我有一系列外部主题:
| pk | group_id | subid |
|----|----------|-------|
| 1 | 1 | a1 |
| 2 | 1 | a2 |
| 3 | 1 | a3 |
| 4 | 2 | b1 |
| 5 | 3 | c1 |
| 5 | 3 | c2 |
| 7 | 3 | c3 |
| 8 | 3 | b4 |
我有一系列内部主题
[s1, s2, s3]
我的尝试是(错误的)
[a1, a2, a3]
基本上,我尝试将此sql查询包装到php函数中。如果查询返回关系id。我知道SELECT
group_id
FROM
external_subject_group e_s_g,
internal_subject_group i_s_g
WHERE
e_s_g.group_id = i_s_g.group_id AND
e_s_g.subid = "s1" AND
e_s_g.subid = "s2" AND
e_s_g.subid = "s3" AND
i_s_g.subid = "a1" AND
i_s_g.subid = "b1" AND
i_s_g.subid = "c1"
The group id either exist or empty.
存在关系。
[s1, s2, s3] x [a1, a2, a3]
。
答案 0 :(得分:0)
我怀疑你想要的不仅仅是一个简单的where条件,而且你正在寻找一种识别具有全部3个值的组的方法。以下是一些替代查询。第一个是我最好的猜测,第二个是用于比较,你可以在SQL Fiddle
试用这些例子Oracle 11g R2架构设置:
CREATE TABLE Table1
(PK int, GROUP_ID int, SUBID varchar2(20))
;
INSERT ALL
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (1, 1, 's1')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (2, 1, 's2')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (3, 1, 's3')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (4, 2, 'x1')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (5, 2, 'x2')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (6, 3, 'y1')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (7, 3, 'y2')
INTO Table1 (PK, GROUP_ID, SUBID)
VALUES (8, 3, 'y3')
SELECT * FROM dual
;
以下查询使用GROUP BY和HAVING SUM(...)作为一个constct,要求必须使用ALL 3想要的subid。
查询1 :
select group_id
from Table1
group by group_id
having SUM(case when subid in('s1','s2','s3') then 1 else 0 end) = 3
<强> Result 强>:
| GROUP_ID |
|----------|
| 1 |
查询2 :
此查询仅要求使用列出的任何一个子组件。
select distinct group_id
from Table1
where subid in('s1','s2','s3')
<强> Result 强>:
| GROUP_ID |
|----------|
| 1 |
+ EDIT 您可能还需要使用UNION ALL
select group_id
from (
select pk,group_id,subid from external_subject_group e_s_g
UNION ALL
select pk,group_id,subid from internal_subject_group i_s_g
) t1
group by group_id
having SUM(case when subid in('s1','s2','s3','a1','a2','a3') then 1 else 0 end) = 6