Ich habe zwei Tabellen: Gems und Gemdetail, die links sind verbunden. Ich versuche den LEFT JOIN auf 10 Datensätze in der Gems-Tabelle zu beschränken. Es gibt zwei weitere Tabellen (gemreply und Benutzer), aber sie tragen nicht zum Problem bei. Die folgende funktioniert nicht:Begrenzen Sie eine linke Join auf der ersten Tabelle
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;
Dies begrenzt die Gesamtzahl der zurückgegebenen Zeilen zu 10, aber da gibt es mehrere Detaildatensätze für jeden Edelstein sind, bin ich mit weniger als 10 gem Aufzeichnungen links. Ich habe jeden "LIMIT" -Posten gelesen, aber diese Situation nicht gefunden.
UPDATE 1: OK - dank jviladrich - es hat funktioniert. Hier ist der Code:
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 ;
UPDATE 2: Der Code von yogeshr unten funktioniert auch - wahrscheinlich diejenige, die ich mit gehen werde. Danke euch beiden!
Verschieben Sie das Limit innerhalb der Unterabfrage? – Ben
Diese Version von MySQL unterstützt "LIMIT & IN/ALL/ANY/SOME-Unterabfrage" noch nicht, was in einer Unterabfrage geschieht. – mseifert
Ok, willst du also die ersten 10 Edelsteine und alle ihre Details aufnehmen und dann mit GEMEPRLY und Usern beitreten oder LINKEN? – Rachcha