gpt4 book ai didi

MySQL:检索恰好 2 行共享相同 ID 但具有不同用户 ID 的 ID

转载 作者:行者123 更新时间:2023-11-29 05:03:31 25 4
gpt4 key购买 nike

我有一个 MySQL 表,它将用户与如下图或 sqlfiddle 类似的对话相关联:

MySQL Table Screenshot

http://sqlfiddle.com/#!9/b4d329

如您所见,用户 1000001 和用户 1000002 都属于 2 个 session - 10 和 20。

我需要做的是检索只有用户 1000001 和用户 1000002 与之关联的 conversation_id。将被拉取的正确 conversation_id 是 10。

正如您在 conversation_id 20 中看到的那样,第 3 个用户与其相关联 - 1000003 - 所以我不想提取该 conversation_id,即使用户 1000001 和 1000002 与其相关联也是如此。

另请注意,当只有一个 user_id 与 conversation_id 相关联时,这种情况不会发生。

非常感谢您的帮助!

最佳答案

这是一种高效的方法,根本不使用子查询。您可以使用条件聚合简单地过滤掉 Having 子句中的结果:

SELECT 
conversation_id
FROM assoc_user__conversation
GROUP BY conversation_id
HAVING
-- all the rows to exists only for 1000001 or 1000002 only
SUM(user_id IN (1000001, 1000002)) = COUNT(*)

结果

| conversation_id |
| --------------- |
| 10 |

View on DB Fiddle


另一种可能的条件聚合变体是:

SELECT 
conversation_id
FROM assoc_user__conversation
GROUP BY conversation_id
HAVING
-- atleast one row for 1000001 to exists
SUM(user_id = 1000001) AND
-- atleast one row for 1000002 to exists
SUM(user_id = 1000002) AND
-- no row to exist for other user_id values
NOT SUM(user_id NOT IN (1000001, 1000002))

关于MySQL:检索恰好 2 行共享相同 ID 但具有不同用户 ID 的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53124760/

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