MySQL选择仅标记一行的项目
我的情况与以下类似:MySQL选择仅标记一行的项目,mysql,Mysql,我的情况与以下类似: Pets petId | name | option | optionAvail ------+------+--------+------------ 1 | Dog | Leash | 1 2 | Dog | Crate | 0 3 | Cat | Leash | 1 4 | Cat | Box | 1 我想要一个查询,如果我指定了一个选项,它应该返回所有名称,并且该名称是唯一可用的选
Pets
petId | name | option | optionAvail
------+------+--------+------------
1 | Dog | Leash | 1
2 | Dog | Crate | 0
3 | Cat | Leash | 1
4 | Cat | Box | 1
我想要一个查询,如果我指定了一个选项,它应该返回所有名称,并且该名称是唯一可用的选项。例如,如果我指定了皮带,我希望只返回狗,因为皮带是狗的唯一可用选项,猫也有盒子可用。这样做的目的是通知用户,如果名称使某个选项不可用,则当前将不再应用其他可用选项。这将返回符合此条件的任意数量的名称,但一次只能指定一个选项(不能为同一查询指定皮带和板条箱)。这看起来像是一个简单的查询,但我就是想不起来。您可以使用
条件聚合来实现:
select name
from pets
where optionAvail = 1
group by name
having count(case when `option` != 'Leash' then 1 end) = 0
计算选项总数和您正在选择的选项。如果它们是一样的,那么这是唯一的选择
SELECT name
FROM pets
WHERE optionAvaile = 1
GROUP BY name
HAVING COUNT(*) = SUM(option = 'Leash')
我对条件聚合没有太多的经验,所以感谢您的回答,它正是我想要的