MySQL选择仅标记为一行的项目

时间:2016-08-06 03:13:23

标签: mysql

我的情况类似于以下情况:

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)。这似乎只是一个简单的查询,但它并没有找到我。

2 个答案:

答案 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')