Mysql Count with Inner join of two tables, Average Join

Posted

技术标签:

【中文标题】Mysql Count with Inner join of two tables, Average Join【英文标题】: 【发布时间】:2013-05-24 07:07:57 【问题描述】:

我渴望加入两个表,但似乎无法正确,结构如下所示。

Table1(成员) [用户登录 |姓名]

表 2(文章) [艺术 ID |作家 |内容] Article.writer 指向 Members.UserLogin

我想用尽可能少的代码显示已注册 UserLogins 的整个列表,以及他们可能写过多少文章的计数,​​或者如果他们没有写过任何文章,他们也应该在列表中.

我想要什么: [用户登录 |姓名 |写的文章]

到目前为止,我得到的是:

SELECT UserLogin, Name, Writer, count(*)
FROM Article
INNER JOIN Members on Writer=UserLogin
GROUP BY UserLogin;

SELECT UserLogin, Name, count(Writer)
FROM Article
LEFT JOIN Members ON UserLogin = Writer
GROUP BY 1;

它们都列出了 mysql 中的所有内容,但没有一个包含从未写过任何文章的用户登录名和姓名。你们能指出我正确的方向吗?我了解我的查询的问题,但我不知道如何解决它。

我在这个论坛上发现了类似的问题,但我没有从他们那里得到任何解决方案。可能是语言障碍或只是缺乏基本的 mysql 知识。

【问题讨论】:

"foreign key is "Name" which is pointing to "Writer" -- 不是Article.writer指向Members.UserLogin,其中表Article依赖表Members 是的,这就是我的意思,将编辑。对不起... 【参考方案1】:

你可以使用子查询

SELECT m.UserLogin, 
       m.Name, 
       (SELECT COUNT(*) 
          FROM Articles 
         WHERE Writer = m.UserLogin) ArticlesWritten
  FROM Members m

样本输出:

| USERLOGIN |  NAME | ARTICLESWRITTEN |
---------------------------------------
|     user1 |  Jhon |               2 |
|     user2 | Helen |               0 |

这里是SQLFiddle

【讨论】:

Writer = m.Name 这里m.UserLogin 会来 @DevalShah OP 的原话...外键是“Name”,它指向“Writer”... 这是我的错……从一开始。【参考方案2】:

只需使用LEFT JOIN 交换表名,

SELECT UserLogin, Name, count(Writer)
FROM   Members 
       LEFT JOIN Article on Writer = UserLogin
GROUP  BY UserLogin, Name

如需进一步了解联接,请访问以下链接:

Visual Representation of SQL Joins

在您所说的问题中,“外键是指向“Writer”的“Name”,这不是writer is pointing to UserLogin 其中表Article 依赖于表@987654326 @?

【讨论】:

我真的很喜欢你的回答,简洁,你给了我一些很好的阅读。像魅力一样工作,尽管信息有误,但您理解我的意图很好……非常感谢!希望在进行文章/会员查询时会有更多人从中学习。【参考方案3】:
SELECT
  m.UserLogin,
  m.Name,
  (SELECT
     COUNT(a.ArtID)
   FROM Article a
   WHERE a.Writer = m.UserLogin) AS ArticlesWritten
FROM Members m

【讨论】:

【参考方案4】:

试试这个。

SELECT m.UserLogin,m.Name,COUNT(a.ArtID) FROM Members m LEFT JOIN Article a ON a.Writer=m.Name GROUP BY m.Name;

【讨论】:

以上是关于Mysql Count with Inner join of two tables, Average Join的主要内容,如果未能解决你的问题,请参考以下文章

SQL Keep running count, after inner Join

MySQL 8嵌套select with count

mysql 优化例子:IN 换 INNER JOIN

Mysql LEFT JOIN with count 返回未知列

mysql 里面JOIN 和 INNER JOIN 区别是啥

如何让 mySql 返回 Select JOIN with Count?