Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择仅标记一行的项目_Mysql - Fatal编程技术网

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

我对条件聚合没有太多的经验,所以感谢您的回答,它正是我想要的