2013-03-27 86 views
0

我写过一个存储过程。 shipmentnumbers和cartonid都应返回逗号分隔值。出货编号即将到来,即逗号分隔值,但cartonid总是只返回一个值,即使有多行。我如何解决这个问题。存储过程中无法识别的GROUP_CONCAT值

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 ; 

回答

1

为什么不给下面的一个尝试,使用一个内连接来匹配所有组合

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; 
相关问题