Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego moje zapytanie zwraca daleko do wielu wyników?

Brakuje warunku dołączenia między candidates i jobs , dzięki czemu między obydwoma stołami otrzymujesz produkt kartezjański. Ponadto występuje problem z warunkiem dołączenia do skill_names , gdzie obie kolumny są takie same (to ponownie generuje iloczyn kartezjański).

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

Wiele RDBMS zgłasza błąd składni przy JOIN bez ON klauzula (jeśli chcesz otrzymać produkt kartezjański, musisz to wyraźnie określić, używając CROSS JOIN ), ale niestety nie MySQL.

Jeśli chodzi o to pytanie:

Nie. Dopóki używasz inner join s (nie left join s), kolejność łączenia nie ma znaczenia dla planisty zapytań, który przestawi je w kolejności, którą uważa za bardziej wydajną.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zend_Db kolejność według pola Wartość

  2. Dlaczego menedżer kontekstu MySQLdb Connection nie zamyka kursora?

  3. Wyliczanie kombinacji za pomocą SQL

  4. Błąd podczas wstawiania do bazy danych sql za pomocą php

  5. Serwer MySQL odszedł wraz z Ruby on Rails