MySQL запрос, показывающий 9 результатов

У меня проблема.

Я запускаю следующий запрос. У меня есть только одна запись в моей базе данных, но я получаю 9 результатов.

SELECT c.id, c.rk 
FROM cv AS c, employee AS e , cvCat AS cv_cat 
WHERE c.status=1 
    AND c.empIDFK = e.id 
    AND cv_cat.categoryFK IN ( 17,18,19,38,39,40,41,44,45,46 ) 
    AND cv_cat.cvFK = c.id

Может кто-нибудь, пожалуйста, дайте мне знать, если у них есть какие-либо проблемы с этим запросом. Почему я получаю 9 результатов, а не только 1 результат.

Этот запрос должен отображать только одну запись, но он показывает 9 результатов.

3 ответа

Решение

Когда вы делаете

FROM cv AS c, employee AS e , cvCat AS cv_cat

Вы делаете неявное объединение трех таблиц. Если вы хотите получить отдельные записи, вы можете добавить DISTINCT после вашего выбора:

SELECT DISTINCT c.id, c.rk 
FROM cv AS c, employee AS e , cvCat AS cv_cat 
WHERE c.status=1 
    AND c.empIDFK = e.id 
    AND cv_cat.categoryFK IN ( 17,18,19,38,39,40,41,44,45,46 ) 
    AND cv_cat.cvFK = c.id

Используйте явные объединения:

SELECT c.id, c.rk
FROM cv c
INNER JOIN employee e ON e.id = c.empIDFK
INNER JOIN cvCat cv_cat ON cv_cat.cvFK = c.id
WHERE c.status = 1
AND cv_cat.categoryFK IN (17,18,19,38,39,40,41,44,45,46)

Я думаю, что "проблема" 9 строк результата основана на вашем синтаксисе JOIN, так как такого рода неявное объединение вернет все строки (каждой таблицы) как объединенный результат, так как вы извлекаете только c.id и c.rk может показаться, что MySQL отправил тот же результат обратно 9 раз.

Примечание: неявные объединения осуждаются с использованием явных объединений, таких как...

    SELECT c.id, c.rk
    FROM cv c
    LEFT JOIN employee e ON c.empIDFK = e.id
    LEFT JOIN cvCat cv_cat ON c.id = cv_cat.cvFK
    WHERE...

Поможет немного "заглянуть в будущее" вашего кода и добавит немного более самоописывающего синтаксиса ко всему запросу.

Другие вопросы по тегам