我的情况类似于以下情况:
Pets
petId | name | option | optionAvail
------+------+--------+------------
1 | Dog | Leash | 1
2 | Dog | Crate | 0
3 | Cat | Leash | 1
4 | Cat | Box | 1
我想要一个查询,如果我指定一个选项,它应该返回所有名称,这是唯一可用的选项。因此,例如,如果我指定Leash我只想要返回Dog,因为Leash是Dog的唯一可用选项,其中Cat也有Box可用。该想法是向用户通知名称,如果他们使一个人不可用,则他们目前没有更多可用选项。这应返回符合此条件的任意数量的名称,但一次只能指定一个选项(无法为同一查询指定Leash和Crate)。这似乎只是一个简单的查询,但它并没有找到我。
答案 0 :(得分:1)
您可以使用conditional aggregation
:
select name
from pets
where optionAvail = 1
group by name
having count(case when `option` != 'Leash' then 1 end) = 0
答案 1 :(得分:0)
计算选项总数和您选择的选项。如果它们相同,那么这是唯一的选择。
SELECT name
FROM pets
WHERE optionAvaile = 1
GROUP BY name
HAVING COUNT(*) = SUM(option = 'Leash')