我想找一个生物学上的“找到某一组生物体的核心基因组”的问题。从本质上讲,给出一份有机体清单,找出它们共有的所有基因。为了抽象化生物学,你可以想出在一个人的列表中找到所有最喜欢的颜色(一个人可以有多种最喜欢的颜色)。
数据库表如下所示:
name | fav_colour
john | red
john | blue
john | green
jason | red
jason | blue
matt | red
matt | teal用户可以指定一组名称,如john、jason以发出红色、蓝色或john以获得红色、蓝色、绿色,或john、jason、matt以获取红色。
我试图通过做n个自联接数来解决这个问题,其中n是提供的名称数。
,我是否有办法对表进行n个自联接,以解决所提供的任意多个名称的问题?,我试图通过Postgres函数寻找一种方法,但无法计算出n个自联接部分的数目。任何帮助或指向正确方向的指示都将不胜感激。
不,不幸的是,我不能更改模式来更容易地执行这些类型的查询。
发布于 2017-05-28 02:05:51
我不认为你需要自我加入。可以使用聚合和HAVING子句:
with t(name, fav_colour) as (
values ('john', 'red'),
('john', 'blue'),
('john', 'green'),
('jason', 'red'),
('jason', 'blue'),
('matt', 'red'),
('matt', 'teal')
)
select fav_colour
from t
where name in ('john', 'jason')
group by fav_colour
having count(*) = 2;值"2“是列表中的名称数。更改IN列表和计数是您唯一需要的更改。
https://stackoverflow.com/questions/44223158
复制相似问题