2016-09-09 33 views
0

这是我的问题。我有3个表像3张桌子上的计数请求

AUTHORS 
    id (INT, PRIMARY KEY) 
    name (VARCHAR) 

WRITINGS 
    id (INT, PRIMARY KEY) 
    content (TEXT) 
    author_id (INT, FOREIGN KEY) 

COMMENTS 
    id (INT) 
    commentary (TEXT) 
    author_id (INT, FOREIGN KEY) 

我知道如何计算有多少评论多少作品或属于每个用户,这些请求:

SELECT A.id, A.name, COUNT(W.id) 
FROM AUTHORS AS A 
LEFT JOIN WRITINGS AS W 
    ON A.id = W.author_id 
GROUP BY A.id; 

SELECT A.id, A.name, COUNT(C.id) 
FROM AUTHORS AS A 
LEFT JOIN COMMENTS AS C.author_id 
    ON A.id = C.author_id 
GROUP BY A.id; 

但是,有没有办法获得这些两项罪名(着作和评论)在一个独特的要求?

其他挑战:同样的问题,但没有嵌套的请求。

在此先感谢

+0

我认为最简单的方法是去两个从属子查询。 – LSerni

回答

0

放在一个子查询的一个查询,并与其他人加入。

SELECT A.id, A.name, IFNULL(COUNT(W.id), 0) AS writing_count, IFNULL(C.comment_count, 0) AS comment_count 
FROM AUTHORS AS A 
LEFT JOIN WRITINGS AS W 
    ON A.id = W.author_id 
LEFT JOIN (
    SELECT author_id, COUNT(*) AS comment_count 
    FROM COMMENTS 
    GROUP BY author_id) AS C 
    ON A.id = C.author_id 
GROUP BY A.id 
+0

**谢谢**,它在我真正的(更复杂的)桌子上完美地工作。现在我可以继续创建存储过程等。 – HarvestR