sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor returnerer min forespørgsel langt til mange resultater?

Du mangler en sammenføjningsbetingelse mellem candidates og jobs , så du får et kartesisk produkt mellem begge borde. Der er også et problem med join-betingelsen på skill_names , hvor begge kolonner er ens (dette genererer igen et kartesisk 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

Mange RDBMS ville rejse en syntaksfejl på en JOIN uden en ON klausul (hvis du ønsker et kartesisk produkt, skal du være eksplicit om det ved at bruge CROSS JOIN ), men desværre ikke MySQL.

Når det kommer til dette spørgsmål:

Nej. Så længe du bruger inner join s (ikke left join s), er sammenføjningsrækkefølgen ligegyldig for forespørgselsplanlæggeren, som vil omarrangere dem i den rækkefølge, som den mener er den mest effektive.




  1. Opret en testdatabasekopi af produktion med kun et eksempelsæt af data

  2. Problem med Oracle-dataadgangsversion

  3. Hvordan kombinerer man samlede funktioner i MySQL?

  4. Sammenlign kun dag og måned med datofelt i mysql