我写了一个存储过程。 shipmentnumbers 和 cartonid 都应返回逗号分隔值。 shippingnumbers 正常,即逗号分隔值,但 cartonid 始终仅返回一个值,即使有多行也是如此。我该如何解决这个问题。
DELIMITER $$
CREATE PROCEDURE `sp_deleteOrderData`(orderid BIGINT(11))
BEGIN
DECLARE shipmentnumbers VARCHAR(1000);
DECLARE cartonid VARCHAR(1000);
SELECT GROUP_CONCAT(a_shipmentid) FROM t_shipment WHERE a_orderid = orderid INTO shipmentnumbers;
SELECT GROUP_CONCAT(a_cartonid) FROM t_carton WHERE a_shipmentid IN (shipmentnumbers) INTO cartonid;
SELECT shipmentnumbers;
/*SELECT cartonid; */
END$$
DELIMITER ;
最佳答案
为什么不尝试以下操作,使用内部联接来匹配所有组合
DELIMITER $$
CREATE PROCEDURE `sp_deleteOrderData`(orderid BIGINT(11))
BEGIN
DECLARE shipmentnumbers VARCHAR(1000);
DECLARE cartonid VARCHAR(1000);
SELECT
GROUP_CONCAT(a_shipmentid),
GROUP_CONCAT(a_cartonid)
INTO
shipmentnumbers,
cartonid
FROM t_shipment ts
LEFT JOIN t_carton tc
ON tc.a_shipmentid = ts.a_shipmentid
WHERE ts.a_orderid = orderid;
SELECT
shipmentnumbers,
cartonid;
END$$
DELIMITER ;
如果您尝试从这些表中删除,尽管您可能可以通过一些连接更有效地做到这一点,即
DELETE ts,tc
FROM t_shipment ts
LEFT JOIN t_carton tc
ON tc.a_shipmentid = ts.a_shipmentid
WHERE ts.a_orderid = orderid;
关于mysql - 存储过程中无法识别 GROUP_CONCAT 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655873/