我渴望连接两个表,但似乎无法正确处理,其结构如下所示。

表1(成员)
[UserLogin |名称 ]

表2(文章)
[ArtID |作家|内容]
Article.writer指向Member.UserLogin

我想显示的代码尽可能少,既要显示已注册的UserLogins的整个列表,又要显示他们可能写了多少篇文章,或者如果他们没有写任何文章,那么它们也应该仍然显示在列表中。

我想要的是:
[UserLogin |姓名|文章]

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

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知识。

最佳答案

您可以使用子查询

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

08-25 18:25