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...
Поможет немного "заглянуть в будущее" вашего кода и добавит немного более самоописывающего синтаксиса ко всему запросу.