sql >> Databasteknik >  >> RDS >> Mysql

Varför ger min fråga många resultat?

Du saknar ett anslutningsvillkor mellan candidates och jobs , så du får en kartesisk produkt mellan båda borden. Det finns också ett problem med kopplingsvillkoret på skill_names , där båda kolumnerna är samma (detta genererar återigen en 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

Många RDBMS skulle skapa ett syntaxfel på en JOIN utan en ON klausul (om du vill ha en kartesisk produkt måste du vara tydlig om den genom att använda CROSS JOIN ), men tyvärr inte MySQL.

När det kommer till denna fråga:

Nej. Så länge du använder inner join s (inte left join s), spelar sammanfogningsordningen ingen roll för frågeplaneraren, som kommer att ordna om dem i den ordning som den anser är effektivare.




  1. Hur räknar man det totala beställningspriset?

  2. MySQL Tutorial – Förstå sekunderna bakom Master Value

  3. Sammankoppla grupper i SQL Server

  4. MariaDB Connector/Python Beta nu tillgänglig