Mysql 无活动状态的SQL查询

Mysql 无活动状态的SQL查询,mysql,sql,database,status,Mysql,Sql,Database,Status,场景:我有一个状态为“活动”或“已删除”的表。假设我们谈论的是车主。表中的状态可以反映一个事实,即有两个以前的所有者,即删除状态,并且表中只有一个当前所有者具有活动状态 问题:我如何编写一个涉及这样一个表的查询,以便只包含没有当前所有者的结果,即-没有活动状态的汽车的行 仅当至少有1行符合上述条件时,以下内容才会匹配。因此,这对于我所寻求的是无效的: 测试查询1 测试查询2 我想你想要: select co.* from car_owners co where not exists (selec

场景:我有一个状态为“活动”或“已删除”的表。假设我们谈论的是车主。表中的状态可以反映一个事实,即有两个以前的所有者,即删除状态,并且表中只有一个当前所有者具有活动状态

问题:我如何编写一个涉及这样一个表的查询,以便只包含没有当前所有者的结果,即-没有活动状态的汽车的行

仅当至少有1行符合上述条件时,以下内容才会匹配。因此,这对于我所寻求的是无效的:

测试查询1 测试查询2 我想你想要:

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   |
+--------+----------+-----------+