gpt4 book ai didi

mysql - 通过比较总状态与指定状态来检索 id 列表

转载 作者:行者123 更新时间:2023-11-29 07:05:50 24 4
gpt4 key购买 nike

我有一份客户名单。每个客户端可以有多个事件 (0..*)。每个事件都包含一个状态“is_completed”,它是一个 bool 值(True/False)。

我需要检索已完成所有事件的客户列表:

  • 如果客户完成了所有事件,我就会保留他。
  • 如果客户尚未完成所有事件,我会忽略他。

我编写了一个 SQL 查询来完成这项工作,但我不相信它已经过优化:

SELECT DISTINCT cc.client_id
FROM clients_clientactivity AS cc
LEFT JOIN clients_client AS c ON (c.id = cc.client_id)
WHERE c.client_type_id = 2
AND (
SELECT COUNT(cc1.id) FROM clients_clientactivity AS cc1 WHERE cc1.client_id = cc.client_id
) = (
SELECT COUNT(cc2.id) FROM clients_clientactivity AS cc2 WHERE cc2.is_completed = True AND cc2.client_id = cc.client_id
);

我该如何改进它?

感谢您的帮助。

最佳答案

您可以使用 not in select 来表示不正确

SELECT DISTINCT cc.client_id
FROM clients_clientactivity AS cc
LEFT JOIN clients_client AS c ON (c.id = cc.client_id)
WHERE c.client_type_id = 2
AND cc.client_id NOT IN (
SELECT cc2.client_id
FROM clients_clientactivity AS cc2
WHERE cc2.is_completed != True
)

关于mysql - 通过比较总状态与指定状态来检索 id 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com