36

SELECT次のようなステートメントを持つSPがあるとしましょう。

SELECT product_id, product_price FROM product 
WHERE product_type IN ('AA','BB','CC');

ただし、データはそのIN句に送られ、値の文字列を含む単一の変数を経由する必要があります。下の何かのリンク

SELECT product_id, product_price FROM product 
WHERE product_type IN (input_variables);

しかし、そのようには機能しません。これを行う方法はありますか?

4

4 に答える 4

54

このようにパラメーター値を渡します - 'AA,BB,CC'。次に、FIND_IN_SET関数を使用するだけで十分です-

SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
于 2012-10-29T07:33:34.680 に答える
3

コンマ区切りの値をテーブルに変換するユーザー定義関数を作成し、この 2 つを結合することで目的の結果を得ることができます。

多くのための

于 2012-10-29T05:30:43.300 に答える
2

変数を使用して文字列を渡すことが問題でした。この解決策を想定してください

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTestListValues`(_list varchar(200))
BEGIN
        SET @LIST=_list; -- assume this a paramter from the stored procedure
    SELECT NULL AS Id,  '' AS Description --insert null value to be used for list box population
    UNION  
    (SELECT id, Description
    FROM test_table
    WHERE FIND_IN_SET(id,@LIST) ORDER BY Description ASC) ;

END

他のクエリ ウィンドウからのプロシージャの呼び出し

call `spTestListValues`('4,5,3'); --no paramter currently for test

出力

ID Description
NUll 
1   TEST1 
4   TEST2
5   TEST3
于 2013-12-18T09:36:48.830 に答える
-1

準備済みステートメントを使用してみてください:
https://dev.mysql.com/doc/refman/8.0/en/sql-prepared-statements.html

于 2012-10-29T06:27:44.673 に答える