7

我渴望加入两张桌子,但似乎无法正确,结构看起来像这样。

Table1(成员) [UserLogin | 姓名 ]

表 2(文章) [ArtID | 作家 | 内容] Article.writer 指向 Members.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 中的所有内容,但没有一个包含从未写过任何文章的人的 UserLogins 和 Names。你们能指出我正确的方向吗?我了解我的查询的问题,但我不知道如何解决它。

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

4

4 回答 4

19

您可以使用子查询

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

于 2013-05-29T06:27:52.483 回答
8

just use LEFT JOIN an interchange the table names,

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

To further gain more knowledge about joins, kindly visit the link below:

在您的问题中,您说“外键是指向”Writer“的”Name”,不是writer is pointing to UserLogin哪个表Article依赖于表Members吗?

于 2013-05-29T06:25:23.590 回答
2
SELECT
  m.UserLogin,
  m.Name,
  (SELECT
     COUNT(a.ArtID)
   FROM Article a
   WHERE a.Writer = m.UserLogin) AS ArticlesWritten
FROM Members m
于 2013-05-29T06:27:57.100 回答
0

尝试这个。

SELECT m.UserLogin,m.Name,COUNT(a.ArtID) FROM Members m LEFT JOIN Article a ON a.Writer=m.Name GROUP BY m.Name;
于 2013-05-29T06:48:13.263 回答