gpt4 book ai didi

mysql - 多人多组SQL

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

我有一个用于人员的表格和一个用于他们可以加入的可能组的表格。显然,多个人可以在同一个组中,一个人可以在多个组中。我无法弄清楚如何使用 MySQL 或任何 SQL 数据库来执行此操作。我有一个解决方案,但我不知道这是否是通常所做的。

我尝试的是创建第三个表,我将其称为“memberships”,其中包含一个 person_id 和一个 group_id 列。所以实际上,这是一个有序对的表。

因此,我有具有名称和主键的人员、具有名称和主键的组,以及具有人员主键和组主键的成员资格。这样,我就可以针对不同的人多次列出同一个人的主键,使他们成为多个组的一部分。

然后要列出特定组的所有成员,我将执行以下查询:

SELECT DISTINCT users.name AS 'Members of Group 2'
FROM users, memberships, groups
WHERE users.user_id = memberships.user_id
AND memberships.group_id = 2;

要列出一个人所属的所有组,我执行以下查询:

SELECT DISTINCT groups.name AS 'Groups of User 3'
FROM groups, memberships, users
WHERE groups.group_id = memberships.group_id
AND memberships.user_id = 3;

我必须使用distinct命令,否则它将打印列表的次数等于组的总数。因此,如果我有 5 个组,并且想要特定组中的人员列表,它会打印相同的列表 5 次。我不知道为什么它会这样做。但我输入了“DISTINCT”这个词,然后它就起作用了。

所以它很实用,但很草率,我不知道这是否是通常的做法。人们通常怎么做?

最佳答案

切勿FROM子句中使用逗号。 始终使用显式的JOIN语法。您的查询应该是:

SELECT u.name as Group2Member 
FROM users u JOIN
memberships m
ON u.user_id = m.user_id
WHERE m.group_id = 2;

注意:您不需要groups 表。

对于成员所在的群组:

SELECT g.name as User3Group
FROM memberships m join
groups g
ON g.group_id = m.group_id
WHERE m.user_id = 3;

对于任一查询,您不应使用也不需要 DISTINCT。这只是计算资源的浪费。

关于mysql - 多人多组SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710013/

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