【发布时间】:2011-05-16 04:05:56
【问题描述】:
我有一个名为 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语句(COUNT(e2.entryId) AS answerCount)。
这是结果:
当我放入 COUNT 语句时,它只返回当它是内部连接时返回的 1 条记录:
更新:
通过确保 LEFT JOIN 正确,并且当我添加 GROUP BY 时,我能够正确返回行,然后正确返回 0 个答案的行。
在下面查看我的查询。
【问题讨论】: