【发布时间】:2020-08-02 19:18:13
【问题描述】:
我正在创建一个Stored Procedure,用于删除位于多个表中的父记录及其子记录。但是,要执行的查询只有 3 种类型,例如:=、> 和 >=。
DELIMITER $$
DROP PROCEDURE IF EXISTS `removeStory` $$
CREATE PROCEDURE `removeStory`(IN _id INTEGER, IN _cond VARCHAR(1))
BEGIN
# checking condition
IF ISNULL(_cond) AND (_cond = '=') OR (_cond = '>') OR (_cond = '>=') THEN
# removing `comment -> replies`
DELETE FROM `comment_replies`
INNER JOIN `comments` ON `comment_replies`.`comment_id` = `comments`.`id`
WHERE `comments`.`story_id` _cond _id;
# removing `comments`
DELETE FROM `comments`
WHERE `story_id` _cond _id;
...
...
# removing `story`
DELETE FROM `stories`
WHERE `id` _cond _id;
END If;
END$$
DELIMITER ;
CALL removeStory(10, '>=');
我在_condition 变量中传递查询操作,但它给了我语法错误。另外,有什么办法可以减少OR 条件。
【问题讨论】:
-
我会将所有 OR 括起来
-
好的,但你能说得更具体一点吗,怎么样..?
-
IF ISNULL(_cond) AND ((_cond = '=') OR (_cond = '>') OR (_cond = '>=')) THEN
-
对不起,@P.Salmon,当我要求减少
_cond条件时,这不是我的想法。我真正的意思是类似于in_arrayinphp。
标签: mysql stored-procedures syntax conditional-statements