MySQL:多对多加入不存在的地方

Dav*_*vid 5 php mysql sql

我再次发布这个问题,因为我觉得我上次可能措辞不好,而且我认为解决方案正在起作用,不是.

我有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)

谢谢!

Tho*_*mas 5

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)