sql >> Databáze >  >> RDS >> Mysql

Proč se můj dotaz vrací k mnoha výsledkům?

Chybí vám podmínka spojení mezi candidates a jobs , takže mezi oběma tabulkami získáte kartézský součin. Také je problém s podmínkou spojení na skill_names , kde jsou oba sloupce stejné (to opět generuje kartézský součin).

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

Mnoho RDBMS by vyvolalo chybu syntaxe na JOIN bez ON klauzule (chcete-li kartézský produkt, musíte se o něm výslovně vyjádřit pomocí CROSS JOIN ), ale bohužel ne MySQL.

Když dojde na tuto otázku:

Ne. Pokud používáte inner join s (nikoli left join s), na pořadí spojení nezáleží pro plánovač dotazů, který je uspořádá v pořadí, které považuje za efektivnější.




  1. Odeslání +-200 e-mailů pomocí funkce php mail() ve smyčce

  2. Dynamická proměnná schématu SQL příkazu Oracle

  3. Rekurzivní dotaz na hirarchická data na základě seznamu sousedství

  4. MySQL:Curdate() vs Now()