web-dev-qa-db-ja.com

IN句に変数を渡す方法は?

SPに次のようなSELECTステートメントがある場合、

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

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

31
Thanu

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

SELECT product_id, product_price
FROM product
WHERE FIND_IN_SET(product_type, param);
47
Devart

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

詳細

4
solaimuruganv

変数を使用して文字列を渡すことは、この解決策を仮定して問題でした

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
2
danielad

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

1
ErikHH