SQL语句,以获得所有具有所有能力列表的公司

Mic*_*son 2 sql select

我有一张公司表,我有一张能力表和一张表; companies_competencies

我试图让所有公司与某个数据集中的所有能力相关联.

因此,例如,我需要让所有拥有1,2和3能力的公司.

我已经开始使用此查询:

SELECT companies.id, companies.name FROM companies, companies_competencies
WHERE companies.id = companies_competencies.companies_id
AND companies_competencies.competency_id IN(1,2,3)
GROUP BY companies.id
Run Code Online (Sandbox Code Playgroud)

这给了我所有拥有一项或多项能力的公司,但我正在努力让公司专门拥有所有这些公司.

Red*_*ter 5

这将为您提供具有所有必要能力的公司ID列表:

select companies_id
from companies_competencies
where competency_id in (1, 2, 3)
group by companies_id
having count(distinct competency_id) = 3 --the # of unique competency IDs
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

select *
from companies
where id in (
    select companies_id
    from companies_competencies
    where competency_id in (1, 2, 3)
    group by companies_id
    having count(distinct competency_id) = 3
)
Run Code Online (Sandbox Code Playgroud)

  • 这里有12种方法可以做到:[如何过滤SQL结果的多任务关系](http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-一,具有一对多,通关系) (4认同)