我有查询,想要计算每个帖子中的帖子数量。现在我遇到了一些问题。如果我的新帖子没有帖子ID就不会显示该帖子。我可以知道如何修复它? 这是我的查询
SELECT t.title, m.userName, COUNT(p.postID) AS Expr1, t.threadID
FROM post p ,thread t , person m WHERE m.PersonID = t.PersonID
AND t.threadID = p.threadID AND t.categories = "Announcement"
GROUP BY t.title, m.PersonName
我希望我能得到像
这样的结果-------------------------------------------------
| Title | Author | Replies|
-------------------------------------------------
| Hello | haah | 7 |
------------------------------------------------
| Bye Bye | lee | 8 |
------------------------------------------------
回复基于对帖子的回复。
答案 0 :(得分:1)
使用LEFT JOIN
代替,如下所示:
SELECT
t.title, m.userName, t.threadID,
COUNT(COALESCE(p.postID, 0)) AS Expr1
FROM
(
SELECT *
FROM thread
WHERE categories = 'Announcement'
) AS t
LEFT JOIN post p ON t.threadID = p.threadID
LEFT JOIN person m ON m.PersonID = t.PersonID
GROUP BY t.title, m.PersonName, t.threadID ;
然后,如果一个帖子没有任何帖子,它将被包含在COUNT
= 0的结果集中。
答案 1 :(得分:1)
第一步是使用JOIN语法重新编写查询(需要来了解此信息)
SELECT t.title
, m.userName
, COUNT(p.postID) As Expr1
, t.threadID
FROM thread As t
INNER
JOIN post As p
ON p.threadID = t.threadID
INNER
JOIN person As m
ON m.PersonID = t.PersonID
WHERE t.categories = "Announcement"
GROUP
BY t.title
, m.PersonName
这使用INNER联接。此连接类型表示每个记录必须在连接的任一侧具有匹配项。
要获得您正在寻找的结果,您需要一个OUTER加入。这将从连接的一侧返回所有记录,并尽可能匹配外部表中的记录。
SELECT t.title
, m.userName
, COUNT(p.postID) As Expr1
, t.threadID
FROM thread As t
LEFT
JOIN post As p
ON p.threadID = t.threadID
INNER
JOIN person As m
ON m.PersonID = t.PersonID
WHERE t.categories = "Announcement"
GROUP
BY t.title
, m.PersonName
请注意第二个查询中的细微更改。我已将一个连接更改为LEFT连接。它将在联接中的第一个(左)表中{em>所有记录thread
,并在可能的情况下匹配post
。
答案 2 :(得分:0)
SELECT t.title, m.userName, COUNT(p.postID) AS Expr1, t.threadID
FROM post p left join thread t on t.threadID = p.threadID
left join person m on m.PersonID = t.PersonID
Where t.categories = "Announcement"
GROUP BY t.title, m.PersonName