在第一个表上限制左连接

mse*_*ert 8 sql left-join limit

我有两张桌子:宝石和宝石都留下了.我试图将LEFT JOIN限制为gems表中的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;
Run Code Online (Sandbox Code Playgroud)

这将返回行的总数限制为10,但由于每个gem有多个详细记录,因此我留下的宝石记录少于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 ;
Run Code Online (Sandbox Code Playgroud)

更新2:以下yogeshr的代码也可以运行 - 可能就是我要使用的代码.感谢你们俩!

小智 8

这样的事情

   SELECT * FROM A
      INNER JOIN ( SELECT * FROM A WHERE A.FIELD1='X' ORDER BY A.FIELD2 LIMIT 10) X
             ON (A.KEYFIELD=X.KEYFIELD)
      LEFT JOIN B ON (A.FIELD = B.FIELD)
      LEFT JOIN C ON (A.FIELD = C.FIELD)
Run Code Online (Sandbox Code Playgroud)


Rac*_*cha 6

试试这个:

SELECT g.gemid, g.title, r.tot, gemdetail.filename
FROM (SELECT * FROM gems WHERE grade = '7' LIMIT 10) g
LEFT JOIN (SELECT gemid, COUNT(*) AS tot FROM gemreply GROUP BY gemid) r
          ON r.gemid = g.gemid
LEFT JOIN gemdetail ON g.gemid = gemdetail.gemid
LEFT JOIN users ON g.userid = users.userid
ORDER BY g.gemid;
Run Code Online (Sandbox Code Playgroud)

这应该工作.