Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum gibt meine Abfrage viel zu viele Ergebnisse zurück?

Ihnen fehlt eine Join-Bedingung zwischen candidates und jobs , sodass Sie ein kartesisches Produkt zwischen beiden Tabellen erhalten. Außerdem gibt es ein Problem mit der Join-Bedingung für skill_names , wobei beide Spalten gleich sind (dies erzeugt wiederum ein kartesisches Produkt).

SELECT can.* , co.*, j.*, sn.*
FROM candidates AS can
JOIN jobs AS j ON j.candidate_id = can.candidate_id --> here: missing join condition
JOIN companies AS co ON j.company_id = co.company_id
JOIN skills AS s ON s.job_id = j.job_id
JOIN skill_names AS sn ON sn.skill_id = s.skill_id  --> and here: wrong join condition

Viele RDBMS würden bei einem JOIN einen Syntaxfehler auslösen ohne ON -Klausel (wenn Sie ein kartesisches Produkt wünschen, müssen Sie dies ausdrücklich angeben, indem Sie CROSS JOIN verwenden ), aber leider nicht MySQL.

Wenn es um diese Frage geht:

Nein. Solange Sie inner join verwenden s (nicht left join s), spielt die Verknüpfungsreihenfolge für den Abfrageplaner keine Rolle, der sie in der Reihenfolge anordnet, die er für effizienter hält.