首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自连接表n次

问自连接表n次
EN

Stack Overflow用户
提问于 2017-05-28 02:01:00
回答 1查看 802关注 0票数 2

我想找一个生物学上的“找到某一组生物体的核心基因组”的问题。从本质上讲,给出一份有机体清单,找出它们共有的所有基因。为了抽象化生物学,你可以想出在一个人的列表中找到所有最喜欢的颜色(一个人可以有多种最喜欢的颜色)。

数据库表如下所示:

代码语言:javascript
复制
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个自联接部分的数目。任何帮助或指向正确方向的指示都将不胜感激。

不,不幸的是,我不能更改模式来更容易地执行这些类型的查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-28 02:05:51

我不认为你需要自我加入。可以使用聚合和HAVING子句:

代码语言:javascript
复制
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列表和计数是您唯一需要的更改。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44223158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档