我有一个表内容
内容(id、contentText、contentDate、idUser → 用户、contentType)
和一个表格VoteQuestion
投票问题(idUser → 用户,idQuestion → 内容,isUp)
例如,我想选择前 30 个最近的问题。
SELECT *
FROM "Content"
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30
但是,我想将包含与此问题相关的信息的另一列连接到此,因此我不需要为返回的每个问题再次查询数据库。
例如,我想计算每个问题的票数,并在同一行中返回所有票数。
例子:
| id | contentText | contentDate | idUser | contentType | votes |
-----------------------------------------------------------------
| 2 | 'abc' | '2013-03-25'| 192 | 'QUESTION' | 10 |
我尝试了以下查询:
WITH question AS
(SELECT *
FROM "Content"
WHERE "type" = 'QUESTION'
ORDER BY "contentDate"
LIMIT 30
)
SELECT COUNT("VoteQuestion"."idUser")
FROM "VoteQuestion", question
WHERE "idQuestion" = question."id"
GROUP BY question."id";
但这不会返回投票数 = 0 的问题(只返回 16 个问题,而不是 30 个)。如何解决?
那么,我怎样才能连接两个表呢?以及如何在查询中减去 isUp
为真且 isUp
为假的选票?
最佳答案
您可以选择投票数:
SELECT Content.* ,
(
SELECT COUNT(*)
FROM VoteQuestion
WHERE idQuestion = Content.id
) as votes
FROM Content
WHERE type = 'QUESTION'
ORDER BY contentDate
LIMIT 30
关于sql - 在多行中显示值 0 的 COUNT(*) 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867092/