В нем говорится, что подзапрос возвращает более 1 строки, но я не уверен, почему?

#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, что вы хотите сравнить….