#mysql #sql
#mysql #sql
Вопрос:
Я объединил около 4 таблиц в своей базе данных и пытаюсь получить краткий список кандидатов, которые соответствуют этим требованиям. В нем не будет отображаться другой человек, который соответствует этим требованиям. Это по какой-то причине работает, когда есть один кандидат, который им соответствует.
SELECT job_seeker.seeker_fn
,job_seeker.seeker_ln
,COUNT(DISTINCT job_seeker.position_title) AS 'Required Skills'
,COUNT(DISTINCT quali_name) AS 'Required Qualifications'
FROM job_seeker
INNER JOIN job_seeker_profile ON job_seeker.seeker_ID = job_seeker_profile.seeker_ID
INNER JOIN qualifications ON job_seeker_profile.qualification_ID = qualifications.qualification_ID
INNER JOIN skill_types ON job_seeker_profile.skill_type_ID = skill_types.skill_type_ID
INNER JOIN skill_areas ON skill_areas.area_ID = skill_areas.area_ID
INNER JOIN job_pos ON qualifications.qualification_ID = job_pos.qualification_ID
WHERE (
SELECT job_pos.qualification_ID
FROM job_pos
WHERE job_pos.qualification_ID = job_seeker_profile.skill_type_ID
AND job_pos.qualification_ID = job_seeker_profile.qualification_ID
)
AND job_pos.job_position_ID = 7;
Ответ №1:
В вашем запросе у вас есть условие WHERE, которое сравнивает результат, связанный с оператором AND, для значения = 7
where ( subquery ) AND job_pos.job_position_ID = 7
не вдаваясь в достоинства концептуальной ошибки, которая лежит в основе вашего синтаксиса (правильная сама по себе, но подразумевающая другую потребность)
это неверно, потому что номер строки из подзапроса и номер строки, управляемой предложением AND , не совпадают
Глядя на ваш запрос, вам не нужен подзапрос, а просто условие where
правильный синтаксис должен быть
SELECT job_seeker.seeker_fn
,job_seeker.seeker_ln
,COUNT(DISTINCT job_seeker.position_title) AS 'Required Skills'
,COUNT(DISTINCT quali_name) AS 'Required Qualifications'
FROM job_seeker
INNER JOIN job_seeker_profile ON job_seeker.seeker_ID = job_seeker_profile.seeker_ID
INNER JOIN qualifications ON job_seeker_profile.qualification_ID = qualifications.qualification_ID
INNER JOIN skill_types ON job_seeker_profile.skill_type_ID = skill_types.skill_type_ID
INNER JOIN skill_areas ON skill_areas.area_ID = skill_areas.area_ID
INNER JOIN job_pos ON qualifications.qualification_ID = job_pos.qualification_ID
WHERE job_pos.qualification_ID = job_seeker_profile.skill_type_ID
AND job_pos.qualification_ID = job_seeker_profile.qualification_ID
AND job_pos.job_position_ID = 7;
Ответ №2:
Вы не можете запускать предложения where, такие как:
WHERE (
SELECT job_pos.qualification_ID
FROM job_pos
WHERE job_pos.qualification_ID = job_seeker_profile.skill_type_ID
AND job_pos.qualification_ID = job_seeker_profile.qualification_ID
)
AND job_pos.job_position_ID = 7;
Вам нужно условие, чтобы что-то равнялось вложенному запросу…… Вы не можете просто вставить вложенный запрос в предложение where и ожидать, что MySQL волшебным образом узнает, что вы пытаетесь сделать, вам нужно сообщить MySQL, что вы хотите сравнить….