我在mysql存储过程中有一个concat字符串。我想在同一存储过程中的where子句中使用该字符串。但是当我使用它时,我只得到第一个值,因为它是逗号分隔的字符串(1,2,3)。所以我无法理解为什么会发生这种情况以及它是什么解决方案。如果有人知道原因和解决方案,那么答案将不胜感激。这是存储过程的代码。
DECLARE newids VARCHAR(255);
SELECT GROUP_CONCAT(id) INTO newids FROM temptblnewcustomers;
DROP TABLE IF EXISTS temptblcustomerspurchase;
CREATE TABLE temptblcustomerspurchase (b_id BIGINT(20), b_customer BIGINT(20), a_item VARCHAR(50));
INSERT INTO temptblcustomerspurchase(b_id, b_customer, a_item)
SELECT b.id AS b_id, b.customer_id AS b_customer, a.item AS a_item FROM purchases a JOIN (
SELECT id, customer_id, item FROM (
SELECT id, customer_id, item FROM purchases WHERE customer_id IN (newids) ORDER BY customer_id, id DESC) t
GROUP BY customer_id) b
ON a.item=b.item;
这里,temptblnewcustomers只包含一列,其中五行的值与任何id一样。而且在newids中,我的价值就像2301,2302,2303。但是当我在WHERE IN()中使用newids时,它需要第一个id,即2301.我认为可能有newids数据类型的原因,因为它是VARCHAR,而temptblnewcustomers的id是BIGINT。但我不确定这会影响。
答案 0 :(得分:0)
您可以直接在WHERE IN
条款中使用选择查询。