gpt4 book ai didi

MySQL 从另一个表中选择具有两个匹配连接行的行

转载 作者:搜寻专家 更新时间:2023-10-30 23:47:46 24 4
gpt4 key购买 nike

嘿,我尝试从一个表中选择一行,而另一个表中有两个匹配的条目。结构如下:

-----------------   ---------------------
| messagegroups | | user_messagegroup |
| | | |
| - id | | - id |
| - status | | - user_id |
| | | - messagegroup_id |
----------------- | |
---------------------

user_messagegroup 中存在两行,其中包含两个用户的 id,并且两次都是相同的 messagegroup_id。我想选择这两个用户所在的消息组。

我不明白..所以我会很感激一些帮助;)

最佳答案

您提供的规范不是很清楚。

你说“有两个用户的 ID”...如果我们认为这意味着你有两个 user_id 值你想在查询中提供,那么找到包含这两个特定用户的消息组的一种方法:

SELECT g.id
, g.status
FROM messagegroups g
JOIN ( SELECT u.messagegroup_id
FROM user_messagegroup u
WHERE u.user_id IN (42, 11)
GROUP BY u.messagegroup_id
HAVING COUNT(DISTINCT u.user_id) = 2
) c
ON c.messagegroup_id = g.id

除了指定的两个用户之外,返回的消息组还可以包含其他用户。

如果你想返回只包含这两个用户的消息组,而不包含其他用户......

SELECT g.id
, g.status
FROM messagegroups g
JOIN ( SELECT u.messagegroup_id
FROM user_messagegroup u
WHERE u.user_id IS NOT NULL
GROUP BY u.messagegroup_id
HAVING COUNT(DISTINCT IF(u.user_id IN (42,11),u.user_id,NULL)) = 2
AND COUNT(DISTINCT u.user_id) = 2
) c
ON c.messagegroup_id = g.id

为了提高性能,您需要在表上使用合适的索引,并且可以重写这些索引以消除内联 View 。

此外,如果您只需要 messagegroup_id 值,则可以仅从内联 View 查询中获取该值,而无需外部查询和对 messagegroups 表的连接操作。

关于MySQL 从另一个表中选择具有两个匹配连接行的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081600/

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