gpt4 book ai didi

mysql - 编写复杂的 MySQL Join 查询

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

这对某些人来说可能很简单,但我无法解决。

我有 3 个表:

团队、用户、标签

Teams                 Users                Tags
------------------- ------------------ -----------------------
userID | teamUserID userID | username userID | name | value
------------------- ------------------ -----------------------
1 | 2 1 | dan 2 | myTag | 1
1 | 3 2 | bob 2 | aTag | 2
1 | 4 3 | jon 3 | bTag | 1
4 | rob 4 | cTag | 5

每个团队可以有多个用户,每个用户可以拥有多个标签。

我需要一个查询,该查询将提供任何给定团队中的用户列表,以及他们拥有的标签总数。

因此,当我向团队 1(dan 的团队)请求结果时,它应该返回以下内容:

-----------------------------------
userID | username | tagTotalValue
-----------------------------------
2 | bob | 3
3 | jon | 1
4 | rob | 5

到目前为止,我有这个查询,但它只为我提供了一条包含整个团队总体总计的记录,而不是单独列出团队中所有用户及其总计的列表。

SELECT username, SUM(value) tagTotalValue
FROM users u LEFT JOIN tags t
ON u.userID = t.userID
WHERE u.userID IN (SELECT teamUserID FROM teams WHERE userID = 1)

救命!

如果有人可以解释如何构建这些查询的好方法,我将非常感激学习。我是否只需要参加 mySQL 类(class),或者是否有可以采用的简单方法?

最佳答案

I need a query which will provide a list of users in any given team, with a total number of tags they have.

这似乎与您编写的查询关系不大。您应该首先将三个表连接在一起,然后进行聚合。查询看起来像这样:

SELECT t.teamId, u.userId, u.username, count(ta.userId) as numTags
FROM teams t JOIN
users u
ON t.teamUserID = u.UserId LEFT JOIN
tags ta
ON u.userID = ta.userID
WHERE t.teamId = @teamId -- this can be removed
GROUP BY t.teamId, u.userId, u.username;

此查询实现了飞跃,teams 有一个用于标识团队的列 - 例如 teamId

关于mysql - 编写复杂的 MySQL Join 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912783/

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