sql >> Database >  >> RDS >> Mysql

Waarom levert mijn zoekopdracht veel resultaten op?

U mist een deelnamevoorwaarde tussen candidates en jobs , dus je krijgt een cartesiaans product tussen beide tafels. Er is ook een probleem met de deelnamevoorwaarde op skill_names , waarbij beide kolommen hetzelfde zijn (dit genereert opnieuw een cartesiaans product).

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

Veel RDBMS zouden een syntaxisfout veroorzaken op een JOIN zonder een ON clausule (als je een cartesiaans product wilt, moet je daar expliciet over zijn door CROSS JOIN te gebruiken ), maar helaas niet MySQL.

Als het op deze vraag aankomt:

Nee. Zolang je inner join gebruikt s (niet left join s), maakt de samenvoegvolgorde niet uit voor de queryplanner, die ze zal herschikken in de volgorde die hij denkt dat het meest efficiënt is.




  1. Hoe u een fysieke back-up kunt maken voor een niet-zakelijke MySQL INNODB-engine?

  2. Is het mogelijk om sql-injectie te doen met opgeslagen procedures?

  3. postgresql zorgt ervoor dat bestaande primaire sleutel automatisch wordt verhoogd bij het invoegen

  4. Een blob retourneren met json