我有一个名为entry 的mySQL 表。里面有2条测试记录:
SELECT * FROM entry WHERE typeId = 2
我有不同的类型。例如,当 typeId = 2 时,这是一个问题。当 typeId = 3 时,这就是答案。当答案插入到此表中时,linkId 列将填充它正在回答的问题的entryId。
例如:
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
根据上面的语句,我有 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)。
这是结果:
当我放入 COUNT 语句时,它仅返回内连接时返回的 1 条记录:
更新:
通过确保 LEFT JOIN 正确,我能够正确返回行,并且当我添加 GROUP BY 时,具有 0 个答案的行正确返回。
请参阅下面我的查询。
最佳答案
我认为条目表上的第二个连接应该是左连接:
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/