mySQL 查询 : for a given typeId, 获取所有条目及其answerCount

标签 mysql sql t-sql

我有一个名为entry 的mySQL 表。里面有2条测试记录:

SELECT * FROM entry WHERE typeId = 2   

SELECT * FROM entry WHERE typeId = 2

我有不同的类型。例如,当 typeId = 2 时,这是一个问题。当 typeId = 3 时,这就是答案。当答案插入到此表中时,linkId 列将填充它正在回答的问题的entryId。

例如:

SELECT * FROM entry WHERE typeId = 3

SELECT * FROM entry WHERE typeId = 3

正如您所看到的,这两条记录的 typeId = 3 并且 linkId 都指向entryId = 1。

在以下查询中,我仅得到具有关联答案的问题。

SELECT SQL_CALC_FOUND_ROWS
entry.entryId, entry.entryText, entry.voteCount AS voteCount,
USER.userName, USER.fbId, COUNT(e2.entryId) AS answerCount
FROM entry
INNER JOIN USER ON entry.userId = USER.userId
INNER JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1
WHERE entry.active = 1 
AND entry.typeId = 2
ORDER BY entry.voteCount DESC

above sql statement results

根据上面的语句,我有 2 个 typeId = 2 的条目。所以我真的希望这个语句返回两个条目,但显然没有任何答案的条目的 answerCount 将为 0。

有人对我向您展示的内容有任何想法来修复此查询以获得所需的结果吗?

更新:

基于以下建议。我将内连接更改为左连接:

SELECT SQL_CALC_FOUND_ROWS DISTINCT
entry.entryId, entry.entryText, entry.voteCount AS voteCount,
USER.userName, USER.fbId
FROM entry
INNER JOIN USER ON entry.userId = USER.userId
LEFT JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1
WHERE entry.active = 1 
AND entry.typeId = 2
ORDER BY entry.voteCount DESC

在这个语句中我取出了计数语句(COUNT(e2.entryId) AS answerCount)。

这是结果:

SQL Left Join no COUNT

当我放入 COUNT 语句时,它仅返回内连接时返回的 1 条记录:

with COUNT and INNER JOIN


更新:

通过确保 LEFT JOIN 正确,我能够正确返回行,并且当我添加 GROUP BY 时,具有 0 个答案的行正确返回。

enter image description here

请参阅下面我的查询。

最佳答案

我认为条目表上的第二个连接应该是左连接:

INNER JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1

应该是:

LEFT JOIN entry AS e2 ON e2.linkId = entry.entryId AND e2.active=1

关于mySQL 查询 : for a given typeId, 获取所有条目及其answerCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6013065/

相关文章:

mysql - ActiveRecord::StatementInvalid in UsersController#create (Insert 不包括新添加的列)

.net - 从查询中获取表架构

sql - 如何重用IN子查询的查询?

跨三个表的t-sql外连接

php - 带外键的 NULL 值

php - CodeIgniter - Group by with order by 不按预期工作

sql-server-2008 - 如何获取仅给出当前日期的月份和年份的 6 个月前的数据?

sql - 代码长度与组织

MYSQL跨多个表选择+使用数学运算符 Average/Count

mysql - 创建可以从任何端点访问的新 Mysql 用户