Что не так с этой хранимой процедурой (вложенный SELECT)? - PullRequest
0 голосов
/ 09 ноября 2018

Это вызывает синтаксическую ошибку при первом SELECT - почему?

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_cand_by_pos_skill`(IN id INT)
BEGIN
SELECT *  FROM candidates 
WHERE cid = ANY(SELECT candid FROM positionskills p, candidate_skills s WHERE p.positionid = id and s.skillid = p.skill);
END

1 Ответ

0 голосов
/ 09 ноября 2018
  • Вам необходимо определить разделитель для чего-то другого (например: $$), отличного от ;. В конце переопределить обратно к ;
  • Пожалуйста, не используйте неявные объединения на основе запятых. Они устарели и подвержены ошибкам. Пожалуйста, переключитесь на современный JOIN .. ON синтаксис.
  • Переключиться на IN вместо = ANY:

Попробуйте вместо этого следующее:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_cand_by_pos_skill`(IN id INT)
BEGIN

SELECT *  
FROM candidates 
WHERE cid IN (SELECT candid 
              FROM positionskills p 
              JOIN candidate_skills s ON s.skillid = p.skill
              WHERE p.positionid = id);

END $$
DELIMITER ;
...