首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:多对多连接不存在的地方

MySQL:多对多连接不存在的地方
EN

Stack Overflow用户
提问于 2011-03-16 03:57:39
回答 3查看 1K关注 0票数 5

我之所以再次发布这个问题,是因为我认为我上次可能表达得很糟糕,而我认为有效的解决方案却不是。

我有3个表:项目、服务和建议。建议提供了项目和服务之间的多对多关系,即建议中的每一行都有一个project_id和一个service_id。

假设有1000个项目和5个服务。我希望我的推荐表中的记录不会超过5000条,但几乎可以肯定会更少(即一些项目没有服务推荐)。因此,对于项目#1,如果推荐了所有5个服务,我将在Recommendations表中看到5行,如下所示:

代码语言:javascript
复制
project_id   service_id
1            1
1            2
1            3
1            4
1            5

我正在尝试做的是构建一个查询,告诉我哪些项目没有推荐所有5个服务,哪些是推荐的。因此,假设项目#1只推荐了前3个服务;显示缺少哪些服务的查询输出可能如下所示:

代码语言:javascript
复制
project_id   service_id
1            4
1            5

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-16 04:07:29

代码语言:javascript
复制
Select P.project_id, S.service_id
From Projects As P
    Cross Join Services As S
Where Not Exists    (
                    Select 1
                    From Recommendations As R1
                    Where R1.project_id = P.project_id
                        And R1.service_id = S.service_id
                    )

应该在MySQL中工作的另一个变体

代码语言:javascript
复制
Select P.project_id, S.service_id
From Projects As P
    Cross Join Services As S
Where (P.project_id, S.service_id) Not In   (
                                            Select R1.project_Id, R1.service_id
                                            From Recommendations As R1
                                            )
票数 5
EN

Stack Overflow用户

发布于 2011-03-16 04:12:05

现在更新,因为我正确地阅读了问题。我仍然使用外部连接,但这次没有子查询:

代码语言:javascript
复制
SELECT p.project_id,s.service_id
FROM projects p
cross join services s
LEFT OUTER JOIN recommendations r on r.project_id = p.project_id and r.service_id = s.service_id
WHERE r.project_id IS NULL
票数 2
EN

Stack Overflow用户

发布于 2011-03-16 04:16:14

一个相当简单的选项是:

代码语言:javascript
复制
select project_id, count(*)
from recommendations
group by project_id
having count(distinct service_id) < (select count(*) from services)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5317270

复制
相关文章

相似问题

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