我有兩張桌子:左側連接的寶石和寶石。我試圖將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