mysql - 仅获取 a 列具有与 b 列中的独特值一样多的重复条目的行

标签 mysql sql

我当前的查询:

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 列中的独特值的计数动态进行。

enter image description here

最佳答案

将计数与 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/

相关文章:

php - 如何过滤输入到 html 表单中的电子邮件?

mysql - 在 MySQL 中, "WHERE column LIKE ' abc %'"是否被视为范围扫描,用于索引目的?

sql - 比较组VS分区依据

php - SQL 查询 'WHERE EXISTS' 如果列返回空

sql - 如何在SQL选择中排除具有某些值的记录

python - 使用 Python 查询 MySQL 数据库

mysql - 我应该如何管理用于 Facebook 和 Twitter 注册/登录的数据库

mysql - 如何从wp_postmeta获取meta_key?

sql - GroupBy 操作的渐近复杂度是多少?

java - CallableStatement.getResultSet() 给出 null