【问题标题】:Inner Join with count on 3 tables内连接与 3 个表的计数
【发布时间】:2016-04-09 07:23:09
【问题描述】:

我们有 3 张桌子

  1. membersurlss 字段 ID、用户名、...
  2. 具有字段 ID、用户名、.....
  3. 的用户
  4. matrix1 字段 ID、用户名 ....

现在我们要在查询中进行 2 次检查。

  1. 所有 3 个表的用户名字段值必须匹配。
  2. 仅随机选取membersurls 表中超过1 个条目的记录。

这是我们尝试过的查询,但没有找到正确的,这意味着它总是拾取 1 条记录,但没有拾取任何其他随机记录。

select membersurlss.Username, COUNT(membersurlss.ID) 
from membersurlss 
INNER JOIN users ON membersurlss.Username=users.Username 
INNER JOIN matrix1 ON matrix1.Username=users.Username 
having COUNT(membersurlss.ID)>1 
order by rand() limit 0,1

我们想随机抽取一条记录。

【问题讨论】:

  • COUNT 没有 GROUP BY 将只返回一行。试试GROUP BY membersurlss.Username。但是 - 如果用户名在其他表中多次出现,它仍然会返回错误的结果。

标签: php jquery mysql sql-server


【解决方案1】:

您的查询将计算所有用户的 ID。为了计算每个用户的 ID,您需要使用GROUP BY membersurlss.Username

select membersurlss.Username, COUNT(membersurlss.ID) 
from membersurlss 
INNER JOIN users ON membersurlss.Username=users.Username 
INNER JOIN matrix1 ON matrix1.Username=users.Username
GROUP BY membersurlss.Username
having COUNT(membersurlss.ID)>1 
order by rand() limit 0,1

如果usersmatrix1 表中的Username 是唯一的,这应该可以工作。

如果membersurlss.ID 是唯一的(或主键),您应该使用DISTINCT 以便仅计算membersurlss 表中的出现次数:

select membersurlss.Username, COUNT(DISTINCT membersurlss.ID) 
from membersurlss 
INNER JOIN users ON membersurlss.Username=users.Username 
INNER JOIN matrix1 ON matrix1.Username=users.Username
GROUP BY membersurlss.Username
having COUNT(DISTINCT membersurlss.ID)>1 
order by rand() limit 0,1

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 2022-11-18
    • 2023-03-03
    • 1970-01-01
    • 2016-08-31
    • 2013-04-07
    相关资源
    最近更新 更多