Mysql 无活动状态的SQL查询
场景:我有一个状态为“活动”或“已删除”的表。假设我们谈论的是车主。表中的状态可以反映一个事实,即有两个以前的所有者,即删除状态,并且表中只有一个当前所有者具有活动状态 问题:我如何编写一个涉及这样一个表的查询,以便只包含没有当前所有者的结果,即-没有活动状态的汽车的行 仅当至少有1行符合上述条件时,以下内容才会匹配。因此,这对于我所寻求的是无效的: 测试查询1 测试查询2 我想你想要:Mysql 无活动状态的SQL查询,mysql,sql,database,status,Mysql,Sql,Database,Status,场景:我有一个状态为“活动”或“已删除”的表。假设我们谈论的是车主。表中的状态可以反映一个事实,即有两个以前的所有者,即删除状态,并且表中只有一个当前所有者具有活动状态 问题:我如何编写一个涉及这样一个表的查询,以便只包含没有当前所有者的结果,即-没有活动状态的汽车的行 仅当至少有1行符合上述条件时,以下内容才会匹配。因此,这对于我所寻求的是无效的: 测试查询1 测试查询2 我想你想要: select co.* from car_owners co where not exists (selec
select co.*
from car_owners co
where not exists (select 1
from car_owners co2
where co2.car_id = co.car_id and co2.status = 'active'
);
如果您只需要汽车ID,可以使用聚合:
select co.car_id
from car_owners co
group by co.car_id
having not max( status = 'active' );
您还可以将having短语表示为:
您可以为此使用运算符。
表结构和示例数据
创建桌车
卡里德国际酒店,
所有者ID int,
carstatus varchar50
;
插入车内
价值观
1,1,主动,,
二,三,主动,,
3,5,主动,
4,11,删除,
4,12,删除,
4,23,活跃,
5,13,删除,,
6,35,删除,
6,38,删除,
6,53,删除,
6,10,主动,
7、13、删除,
8、16、删除;
SQL查询
挑选*
从汽车上
其中carid不在SELECT carid中
从汽车上
其中carstatus=活动
输出
+--------+----------+-----------+
| carid | ownerid | carstatus |
+--------+----------+-----------+
| 5 | 13 | deleted |
| 7 | 13 | deleted |
| 8 | 16 | deleted |
+--------+----------+-----------+
在线演示:再次输入错误,不应该没有最大状态='活动';是否没有maxstatus='active'@cid。这也可能有效,但目的是将max视为布尔或。它也可以是:sumstatus='active'=0,这是我通常编写逻辑的方式。这是一种筛选聚合查询的有趣方式,max将得到0或1。谢谢你的提示
select co.car_id
from car_owners co
group by co.car_id
having not max( status = 'active' );
having min(status) = 'deleted'
+--------+----------+-----------+
| carid | ownerid | carstatus |
+--------+----------+-----------+
| 5 | 13 | deleted |
| 7 | 13 | deleted |
| 8 | 16 | deleted |
+--------+----------+-----------+