0

ストアドプロシージャを作成しました。出荷番号とcartonidはどちらも、コンマ区切りの値を返す必要があります。出荷番号は適切に入力されています。つまり、コンマで区切られた値ですが、cartonidは、複数の行がある場合でも、常に1つの値のみを返します。この問題を解決するにはどうすればよいですか。

 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 ;
4

1 に答える 1

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;
于 2013-03-27T09:56:55.460 に答える