我当前的查询:
select users.id as user_id, opportunities.id as op_id, opportunities.title, certificates.id as cert_id from opportunities
join opportunity_certificates on opportunities.id=opportunity_certificates.opportunity_id
join certificates on opportunity_certificates.certificate_id=certificates.id
join user_certificates on certificates.id=user_certificates.certificate_id
join users on user_certificates.user_id=users.id
where opportunity_certificates.is_required = 1 and
opportunities.id = 1
这会生成下图中的表格。
cert_id 列的值可以为 1 到 7,具体取决于 opportunities.id
。在下表中,我希望查询仅返回具有相同 user_id 但不同 cert_id 1 和 2 的行。
如果表有 3 个不同的 cert_id,我希望它仅返回具有相同 user_id 但不同 cert_id 的行,即 1,2 和 3。
当 cert_id 只有一个值时,查询应返回 cert_id 中具有该一个值的所有记录。基本上,它应该显示拥有所有必需证书的所有用户。
查询必须采用当前格式。我尝试过
group by users.id
having count(*) >
但我不知道如何使该比较相对于 cert_id
列中的独特值的计数动态进行。
最佳答案
将计数与 having
条件进行比较。
select u.id as user_id --, o.id as op_id, o.title
from opportunities o
join opportunity_certificates oc on o.id=oc.opportunity_id
join certificates c on oc.certificate_id=c.id
join user_certificates uc on c.id=uc.certificate_id
join users u on uc.user_id=u.id
where oc.is_required = 1 and o.id = 1
group by u.id --,o.id,o.title
having count(distinct c.id)=(select count(distinct id) from certificates)
关于mysql - 仅获取 a 列具有与 b 列中的独特值一样多的重复条目的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311044/