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

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

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

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

s2j5cfk01#

您需要将分隔符定义为其他内容(例如: $$ )除 ; . 最后重新定义回 ; 请不要使用基于逗号的隐式联接。这些都是过时的和容易出错的。请换成摩登的 JOIN .. ON 基于语法。
切换到 IN 而不是 = ANY :
请尝试以下操作:

  1. DELIMITER $$
  2. CREATE DEFINER=`root`@`localhost` PROCEDURE `get_cand_by_pos_skill`(IN id INT)
  3. BEGIN
  4. SELECT *
  5. FROM candidates
  6. WHERE cid IN (SELECT candid
  7. FROM positionskills p
  8. JOIN candidate_skills s ON s.skillid = p.skill
  9. WHERE p.positionid = id);
  10. END $$
  11. DELIMITER ;

相关问题