2012-03-27 6 views
0

Ich möchte eine linke Join nur mit bestimmten Zeilen der ersten Tabelle in MySQL machen. Zur Zeit habe ich so etwas wie:mysql linken Join mit Bedingung auf Tabelle1

SELECT students.* FROM students    
LEFT JOIN courses       
ON students.id = courses.id     
WHERE students.id = 6 

Aber MySQL wählen Sie zunächst Zeilen aus table1 (Studenten) erfüllen students.id = 6, vor der LEFT JOIN tun? Wenn nicht, gibt es eine Möglichkeit, mysql zu tun? Danke.

+0

es ist möglicherweise nicht die beste Praxis, das gleiche "ID" -Feld zu sharp .. Denken Sie über Ihre Tabellenstruktur und wie sie sich beziehen. – Har

+0

Ja, sieht sehr verdächtig ... Studenten mit der gleichen ID wie die ID des Kurses? – Archimedix

+0

danke für den Rat. Dies war nur ein vereinfachtes Beispiel. Bitte ignoriere die Bedeutung der Felder. – morfys

Antwort

1

Ja, es ist, versuchen Sie dies:

SELECT students.* FROM students    
LEFT JOIN courses       
ON students.id = courses.id     
HAVING students.id = 6 
LIMIT 1 
+0

Danke. Gibt es eine Möglichkeit, die Anzahl der Studentenakten vor dem Beitritt zu begrenzen? "SELECT Studenten. * FROM Studenten LEFT JOIN Kurse ON students.id = courses.id UND students.id = 6 Limit 1" funktioniert nicht – morfys

+0

Ich habe meine Antwort bearbeitet, um Ihre Bedürfnisse zu erfüllen. Ich denke jedoch, dass ein konkreteres Beispiel dafür, was Sie versuchen, uns helfen würde, eine Antwort zu geben, die Ihren Bedürfnissen am besten entspricht. –

0

Es scheint mir, dass Sie für die DB zu optimieren versuchen. Wenn die Abfrage nicht langsam ist und Ihr Testdatensatz eine sinnvolle Annäherung an die Produktions-DB ist, dann ist dies aus vielen Gründen nicht die beste Vorgehensweise.

Nachdem dies gesagt wurde, (vielleicht bin ich nicht richtig, so ignorieren mich)

Ich denke, Ihr versucht, „zu sagen: Wie kann ich die Dinge zu beschleunigen, indem die Anzahl der Zeilen zu begrenzen, dass die DB auf während schaut Die Abfrage "

Der beste Weg, dies zu tun, ist sicherzustellen, dass Sie richtige Indizes für die Tabellen haben, auf den Feldern, die Sie abfragen werden. Indizes sind extrem schnell. Wenn Sie die ID-Felder beider Tabellen nicht bereits indizieren, fügen Sie diese Indizes der Datenbank hinzu, und das könnte Ihr Problem lösen.

+0

danke für deinen Rat. – morfys