我之所以再次发布这个问题,是因为我认为我上次可能表达得很糟糕,而我认为有效的解决方案却不是。
我有3个表:项目、服务和建议。建议提供了项目和服务之间的多对多关系,即建议中的每一行都有一个project_id和一个service_id。
假设有1000个项目和5个服务。我希望我的推荐表中的记录不会超过5000条,但几乎可以肯定会更少(即一些项目没有服务推荐)。因此,对于项目#1,如果推荐了所有5个服务,我将在Recommendations表中看到5行,如下所示:
project_id service_id
1 1
1 2
1 3
1 4
1 5我正在尝试做的是构建一个查询,告诉我哪些项目没有推荐所有5个服务,哪些是推荐的。因此,假设项目#1只推荐了前3个服务;显示缺少哪些服务的查询输出可能如下所示:
project_id service_id
1 4
1 5谢谢!
发布于 2011-03-16 04:07:29
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中工作的另一个变体
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
)发布于 2011-03-16 04:12:05
现在更新,因为我正确地阅读了问题。我仍然使用外部连接,但这次没有子查询:
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发布于 2011-03-16 04:16:14
一个相当简单的选项是:
select project_id, count(*)
from recommendations
group by project_id
having count(distinct service_id) < (select count(*) from services)https://stackoverflow.com/questions/5317270
复制相似问题