因此,在这种情况下,我们所拥有的群体是动物群体。
可以说我有以下表格:
animal_id | attribute_id | animal
----------------------------------
1 | 1 | dog
1 | 4 | dog
2 | 1 | cat
2 | 3 | cat
3 | 2 | fish
3 | 5 | fish
id | attribute
------------------
1 | four legs
2 | no legs
3 | feline
4 | canine
5 | aquatic
第一个表包含定义动物的属性,第二个表跟踪每个属性的含义。现在假设我们对某些数据运行查询并获得以下结果表:
attribute_id
------------
1
4
此数据将描述一条狗,因为它是唯一同时具有属性1和4的animal_id。我希望能够以某种方式基于第三张表获得animal_id(在这种情况下为1),本质上是已经生成的包含动物属性的表。
编辑
因此具有1和4的第三个表不必是1和4。它可以返回2和5(对于鱼),或1和3(猫)。我们可以假设它的结果将始终完全匹配一只动物,但是我们不知道哪一只。
答案 0 :(得分:2)
您可以使用group by
和having
:
with a as (
select 1 as attribute_id from dual union all
select 4 as attribute_id from dual
)
select t.animal_id, t.animal
from t join
a
on t.attribute_id = a.attribute_id
group by t.animal_id, t.animal
having count(*) = (select count(*) from a);
以上内容将查找所有具有和属性的动物。如果您希望动物具有这两个属性:
with a as (
select 1 as attribute_id from dual union all
select 4 as attribute_id from dual
)
select t.animal_id, t.animal
from t left join
a
on t.attribute_id = a.attribute_id
group by t.animal_id, t.animal
having count(*) = (select count(*) from a) and
count(*) = count(a.attribute_id);