gpt4 book ai didi

MySQL - 仅选择列包含特定值的内容,而不是其他内容

转载 作者:行者123 更新时间:2023-12-01 00:17:15 24 4
gpt4 key购买 nike

我有一个包含参与对话的用户的 messages_users 表:

对话编号 |用户ID

由于目的是多个用户可以参与对话,因此一行等于一个用户。

有两种类型的对话:与 friend 的对话和与多个用户的分组对话。它们的区别仅在于其中的人数。

2 个用户 = 与 friend 对话

3 个或更多 = 分组对话

我想让用户通过他们的 ID(这里是 1 和 2)与他们的 friend 开始对话。因此,我需要创建一条 SQL 语句,仅在这两个用户所在的位置检索对话 ID。

如果我这样做,我将获得这两个用户所在的所有对话(例如,如果与他们进行分组对话)

SELECT convId FROM messages_users WHERE userId IN (1,2)

我试过了,但是不行:

SELECT convId FROM messages_users WHERE userId IN (1,2) HAVING COUNT(userId) = 2

也试过这个,但它仍然会让我得到他们正在进行的每一次对话:

SELECT convId FROM messages_users a INNER JOIN messages_users b ON a.convId = b.convId WHERE a.userId = 1 AND b.userId = 2

最佳答案

你想要的条件是:

SELECT mu.convId
FROM messages_users mu
GROUP BY mu.convId
HAVING SUM(CASE WHEN mu.userId = 1 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN mu.userId = 2 THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN mu.userId NOT IN (1, 2) THEN 1 ELSE 0 END) = 0;

您不能在 GROUP BY 之前过滤 ,因为如果在对话中,您将错过计算用户“3”的机会。第三个条件阻止“3”参与。

在 MySQL 中,这可以简化为:

SELECT mu.convId
FROM messages_users mu
GROUP BY mu.convId
HAVING SUM( mu.userId = 1 ) > 0 AND
SUM( mu.userId = 2 ) > 0 AND
SUM( mu.userId NOT IN (1, 2) ) = 0;

关于MySQL - 仅选择列包含特定值的内容,而不是其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947374/

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