我有两张桌子:左侧连接的宝石和宝石。我试图将LEFT JOIN限制为宝石表中的10条记录。还有另外两个表(gemreply和用户),但它们不会导致问题。以下不工作:限制第一张桌子上的左侧加入
SELECT gems.gemid, gems.title, r.tot, gemdetail.filename FROM ((gems
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) AS r ON gems.gemid = r.gemid)
LEFT JOIN gemdetail ON gems.gemid = gemdetail.gemid)
LEFT JOIN users ON gems.userid = users.userid
WHERE gems.grade = '7' ORDER BY gems.gemid LIMIT 0, 10;
这限制了返回的行总数达到10,但因为有每个宝石多个详细记录,我只剩下不到10分宝石的记录。我已经阅读过每一篇“LIMIT”文章,但还没有发现这种情况。
更新1: 好的 - 感谢jviladrich - 它的工作。下面的代码:
SELECT gems.gemid, gems.title, r.tot, gemdetail.filename
FROM ((gems
INNER JOIN (SELECT gems.gemid from gems WHERE gems.grade = '7' ORDER BY gems.gemid LIMIT 0, 10) g
ON (gems.gemid = g.gemid)
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) AS r ON gems.gemid = r.gemid)
LEFT JOIN gemdetail ON gems.gemid = gemdetail.gemid)
LEFT JOIN users ON gems.userid = users.userid ;
更新2: 从yogeshr下面的代码也适用 - 可能是一个我会走。感谢你们俩!
移动子查询内的限制? – Ben
这个版本的MySQL尚不支持子查询内发生的“LIMIT&IN/ALL/ANY/SOME子查询”。 – mseifert
好的,那么你想要记录前10个宝石和他们的所有细节,然后加入或左 - 与gemreply和用户加入? – Rachcha