此存储过程(嵌套SELECT)有什么问题?

时间:2018-11-09 11:27:07

标签: mysql sql mysql-workbench

这在第一个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 :(得分:0)

  • 您需要将定界符定义为$$以外的其他内容(例如:;)。最后,重新定义为;
  • 请不要使用基于逗号的隐式联接。这些都是过时且容易出错的。请切换到基于现代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 ;