0

我正在创建一个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条件。

4

1 回答 1

1

比较运算符不能通过这种方式插入到查询中。您必须使用准备好的语句或 CASE。

...
WHERE CASE _cond WHEN '>'  THEN id >  _id
                 WHEN '<'  THEN id >  _id
                 WHEN '!=' THEN id != _id 
                 ...
                 WHEN '<>' THEN id <> _id 
                 END, 
...
于 2020-04-20T10:36:51.830 回答