繁体   English   中英

MySQL:在WHERE IN子句上使用变量

[英]MySQL: Using variable on a WHERE IN clause

我很生气,试图使用从GROUP_CONCAT获得的值的“数组”到WHERE IN语句中,当GROUP_CONCAT仅采用一个“ id”时,它可以正常工作,但是当采用更多的值时,则不能。

如下所示:

START TRANSACTION;
DECLARE @coupon_ids VARCHAR(MAX);
-- Take one or more ids
SET @coupon_ids:=(SELECT IFNULL( (SELECT GROUP_CONCAT(coupon_id) FROM some_table WHERE order_id=(SELECT entity_id FROM sales_order WHERE increment_id=310033638) GROUP BY order_id),  (SELECT coupon_id FROM some_table WHERE coupon_id=310033638)));
SELECT @coupon_ids;
INSERT INTO some_table_gift VALUES (NULL,TRIM('whatever'),'','');
SET @lastid:=LAST_INSERT_ID();
-- Here if @coupon_ids is just one id, like 123 it works, if it is a list of them like 123,234,254 it doesn't works
UPDATE some_table SET owner_id=@lastid,is_gift=1 WHERE coupon_id IN (@coupon_ids);
COMMIT;
-- Same here
SELECT coupon_id,owner_id,is_gift FROM some_table WHERE coupon_id IN (@coupon_ids);

有谁知道该如何处理?

谢谢!

coupon_id的归档类型是什么,如果不是任何数字类型,将无法使用。

您可以在GROUP_CONCAT为每个结果添加引号(单引号)的一种方法

GROUP_CONCAT(coupon_id SEPARATOR '","')

删除SELECT @coupon_ids

在QUERY中尝试此WHERE coupon_id IN ("@coupon_ids")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM