如何在变量中设置MySQL参数多个值

时间:2019-07-10 06:30:45

标签: mysql

我正在尝试在变量中分配多个值,并使用它执行查询。例如下面的

SET @ledger = "'Cash','Special Offer'";

SELECT `_ledger` FROM `acc_ledger` WHERE `_ledger` IN(@ledger);

但这不能按计划进行。有没有一种方法可以在一个变量中定义多个值?如果是,怎么办?如果没有,我可以对如何解决这个问题提出建议吗?

1 个答案:

答案 0 :(得分:0)

您可以传递多个以逗号分隔的值,然后将这些变量拆分为int表并执行联接

创建函数以分割逗号分隔的参数

DELIMITER $$

DROP FUNCTION IF EXISTS `SPLIT_STR` $$
CREATE FUNCTION SPLIT_STR(id_list VARCHAR(500), delimeter VARCHAR(10), position INT)
  RETURNS VARCHAR(10)
DETERMINISTIC
  BEGIN
    RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(id_list, delimeter, position),
                             LENGTH(SUBSTRING_INDEX(id_list, delimeter, position - 1)) + 1),
                   delimeter, '');
  END$$

DELIMITER ;

从查询中调用SPLIT_STR函数

SET @ledger = "Cash,Special Offer";

CREATE TEMPORARY TABLE IF NOT EXISTS `selected_types` (type varchar(50));

#inserting splitted values to temp table

simple_loop: LOOP
    SET indx=indx+1;
    SET str=SPLIT_STR(x_id_list,',',indx);
    IF str='' THEN
        LEAVE simple_loop;
    END IF;
    INSERT INTO selected_types VALUES(str);
END LOOP simple_loop;

#filter with temp table

SELECT `_ledger` FROM 
`acc_ledger` led
inner join selected_types tmp on tmp.type = led._ledger;