这个存储过程(嵌套select)有什么问题?

68bkxrlz  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(284)

这是在第一次选择时抛出语法错误-为什么?

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
s2j5cfk0

s2j5cfk01#

您需要将分隔符定义为其他内容(例如: $$ )除 ; . 最后重新定义回 ; 请不要使用基于逗号的隐式联接。这些都是过时的和容易出错的。请换成摩登的 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 ;

相关问题