我再次发布这个问题,因为我觉得我上次可能措辞不好,而且我认为解决方案正在起作用,不是.
我有3个表:项目,服务和建议.建议提供了项目和服务之间的多对多关系,即Recommendations中的每一行都有一个project_id和一个service_id.
假设有1000个项目和5个服务.我预计我的Recommendations表中的记录不会超过5000条,但几乎肯定会更少(即某些项目没有服务建议).因此,对于项目#1,如果建议使用所有5个服务,我会在Recommendations表中看到5行,如:
project_id service_id
1 1
1 2
1 3
1 4
1 5
Run Code Online (Sandbox Code Playgroud)
我想要做的是构建一个查询,向我展示哪些项目没有推荐所有5项服务,以及哪些是.因此,假设项目#1仅推荐了前3项服务; 我的查询输出显示哪些缺失可能如下所示:
project_id service_id
1 4
1 5
Run Code Online (Sandbox Code Playgroud)
谢谢!
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
)
Run Code Online (Sandbox Code Playgroud)
另一个应该在MySQL中运行的变种
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
)
Run Code Online (Sandbox Code Playgroud)