2016-07-19 3 views
0

サンプルデータIN()関数

私は道なり、適切に得ていないが、次のようにパラメータを設定しています

enter image description here

問合せ:

SET @parmClientList ='7,11,14'; 

Select fkUserID from tbluserclient where MultipleClientID IN(@parmClientList); 

が、私は直接宣言する場合など、ハード、私は適切な結果を得てコード化されました。

問合せ:

select fkUserID from tbluserclient where MultipleClientID IN(7,11,14); 

は、いくつかのいずれかは、IN()関数のパラメータに複数の値を渡す方法私を提案することができます。

+0

カンマを含むさまざまな文字を含む*単一の*パラメータを渡す場合、代わりに複数の個別のパラメータとして扱うことになるプログラミング言語に名前を付けることはできますか?私はそのような言語に精通しておらず、SQLはそのような言語ではありません。 –

+1

データを正規化する必要があります。カンマで区切られたリストをフィールドに入れることは設計が貧弱であるため、このようなクエリは非常に難しいものです。 – Barmar

答えて

0

IN()の条件のリストはリテラルリストでなければならず、文字列を分割しません。 FIND_IN_SET()を使用してください。 CAST(MultipleClientID AS DECIMAL)を使用して

SELECT fkUserID FROM tbluserClient 
WHERE FIND_IN_SET(CAST(MultipleClientID AS DECIMAL), @parmClientList); 

は、あなたがIN(7,11,14)でそれをテストするとき、あなたが得る単一の数字にカンマ区切りのリストからその列の同じ変換を実行します。どちらの場合も、列の最初の番号がリストにあるかどうかをチェックするだけです。

+0

SET @parmClientList = '7,11,14'; tbluserclientからfkUserIDを選択します。ここで、FIND_IN_SET(MultipleClientID、@ parmClientList); tbluserclientからfkUserIDを選択します。ここで、MultipleClientID IN(7,11,14);どちらも私には異なる結果をもたらしますが、正しい結果セットは私に2番目のクエリを与えます。 IN()関数を使用する – user3505449

+0

これは私が書いたものです。あなたのポイントは何ですか? – Barmar

+0

IN()関数に複数の値を渡す方法を解決してください。 – user3505449