繁体   English   中英

内部联接,计数3张桌子

[英]Inner Join with count on 3 tables

我们有3张桌子

  1. 具有字段ID,用户名,...的memberurlss
  2. 具有字段ID,用户名.....的用户
  3. 具有字段ID,用户名...的matrix1。

现在,我们要在查询中进行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

我们想要随机记录。

您的查询将计算所有用户的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表中的出现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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM