mysql - 存储过程中无法识别 GROUP_CONCAT 值

标签 mysql stored-procedures

我写了一个存储过程。 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/

相关文章:

php - php数据库连接错误

php - 插入语句推过列并丢失数据

php - ipplan - 更新 ipaddradd 中的信息字段

mysql - 从 SHOW ERRORS 查询中选择特定列

.net - 经典 ADO.NET - 如何将 UDT 传递给存储过程?

mysql - 如何将一行分配到不同的行中,并按其具有的值和创建日期分组?

php - 如何使用其名称从数据库中的文件夹中仅检索一张所需的图像?

sql-server - 是否可以在旨在插入数据的存储过程中插入当前日期时间?

performance - 存储过程执行时间不正确

oracle - 回滚@Oracle 上的存储过程