【发布时间】:2017-04-04 16:25:12
【问题描述】:
我有两张桌子groups 和group_members
groups 具有 srno 列之一,它是整数并且是主键
group_members 具有列group_srno,这是映射到表groups 的srno 的外键
group_members 有另一列 member_profile_srno 是整数
样本数据:
groups 有行:
srno groupname
1 firstgroup
2 secondgroup
3 thirdgroup
4 fourthgroup
group_members 有行:
group_srno member_profile_srno
1 147258
1 132678
1 551766
2 347799
2 556657
3 147258
3 365376
3 576252
3 682762
4 147258
4 465545
我希望列出来自groups 的所有行,其中member_profile_srno 是一个成员。在同一个查询中,我还希望获得每个列出的组拥有的成员总数。
所以我的代码正在运行这个查询(例如,member_profile_srno 的值是 147258):
select distinct grps.*,
count(grpmembrs1.member_profile_srno) as grpmembrscount
from groups as grps
inner join group_members as grpmembrs1 on grpmembrs1.group_srno = grps.srno
inner join group_members as grpmembrs2 on grpmembrs2.group_srno = grps.srno
where grpmembrs1.member_profile_srno = 147258
group by grps.srno;
这会返回我预期的结果。
srno groupname grpmembrscount
1 firstgroup 3
3 thirdgroup 4
4 fourthgroup 2
我的意思是我得到了所有拥有 147258 成员的群组,它还列出了每个群组的成员总数。
但是,我不确定为什么连接 grpmembrs2 没有在任何地方引用时存在于查询中。但是,如果我删除该连接,grpmembrscount 不会得到正确的值(所有行都是 1)。
知道为什么会发生这种情况吗?这是正确的方法吗?
【问题讨论】:
-
请更新您的问题添加适当的数据样本和预期结果
-
将
DISTINCT与GROUP BY一起使用看起来很可疑并且可能没有必要。请给我们一些数据。 -
好的,我会在一段时间内用一些数据更新这个问题。谢谢!
-
此查询不遵循 SQL Ansi 定义,即选择列表中的所有列必须按部分分组。只有 MySql 允许这种丑陋的东西,这可能会导致您的问题。加入
grpmembrs2毫无用处,如果你把它拿出来并给你带来错误的结果,那么你的查询从一开始就是错误的。 -
@JorgeCampos 我认为不必要的第二次加入和不同的选择在某种程度上相互抵消了。只是我的预感。