如何用单条MySQL查询按固定Cat值优先筛选Active=1的数据?
单条SQL实现分类下按Active状态返回数据
直接上满足需求的SQL语句,核心利用IF函数结合EXISTS子查询实现逻辑判断:
SELECT Cat, User, Active FROM your_table WHERE Cat = '目标分类' AND Active = IF( EXISTS(SELECT 1 FROM your_table WHERE Cat = '目标分类' AND Active = 1), 1, 0 );
逻辑说明
- 通过
EXISTS子查询快速判断目标分类下是否存在Active=1的记录:- 若存在,
IF函数返回1,WHERE条件会筛选出该分类下所有Active=1的行; - 若不存在,
IF函数返回0,则筛选出该分类下所有Active=0的行。
- 若存在,
简化写法
如果不想重复输入目标分类值,可借助MySQL用户变量优化:
SET @target_cat = '目标分类'; SELECT Cat, User, Active FROM your_table WHERE Cat = @target_cat AND Active = IF( EXISTS(SELECT 1 FROM your_table WHERE Cat = @target_cat AND Active = 1), 1, 0 );
注意将your_table替换为你实际的表名,'目标分类'替换为要查询的具体分类值即可。
内容的提问来源于stack exchange,提问作者Jach Many
相关产品推荐
相关产品推荐

