2016-08-17 10 views
1

"filter"タイプの文字列のリストを使用してWHERE句のINを使用できるかどうかを判断しようとしました。私は以下の持っていた(そして、それは当然のことながら働いていません):INをwhere文節で使用するSQLクエリ

[Facility] Like '*CityName*' 

または

[Facility] Like '*CityName*' AND [ProductionLine] Like 'LineName*' 
:ここ

SELECT * 
FROM Table1 
WHERE Table2.[Filter String] 

[Filter String]は、実際のような様々な作業が、ワイルドカード基準形式、リストと店です

他のスレッドのほとんどの使用例は、通常IN ('a', 'b', ...)または

となります。
IN (SELECT * FROM table WHERE field=xx etc... 

私の場合、ユーザーのエントリに「変更基準」が付いたデータフィールドを使用する必要がありました。では、このSQLクエリをどのように構造化しますか?

+0

それはあなたが求めているかを知ることは非常に難しい...そんな – Isaac

+0

何か: http://stackoverflow.com/a/1865426/1258492 – RAY

答えて

0

私が正しく理解していれば、あなたは、サブクエリを使用することができます。

SELECT t1.* 
FROM Table1 as t1 
WHERE EXISTS (SELECT 1 
       FROM Table2 as t2 
       WHERE t1.facility LIKE t2.[Filter String] 
      ); 
+0

@ Gordon、[フィルタ文字列]ここで動的なフィールドと値(つまり、文字列のフィルタタイプ)を持つリストです。 –

1

あなたが動的選択句でクエリを使用しようとしているように見えます。

SQL DMLは、式の条件でパラメータ化された値のみを許可するため、これは単純なSQL問合せでは不可能です。

SQLサーバーでは、EXECUTEステートメントで提案するタイプのクエリを作成できます。クエリの実行時に評価される文字列パラメータを受け入れることができます。

これは、たびにクエリ実行プランが確立され、コンパイルされるため、パフォーマンスが低下することがあります。パラメータ化されたクエリはこのオーバーヘッドを必要としません。

+0

@ Pekka、情報ありがとうございます。これは残念なことにMS Access 2010環境です。仕事があれば期待していた。 –

+0

@Melvinユーザーは別のテーブルに値の一覧を記録し、その内容を結合する必要があります。これはすぐに大きなミッションに吹き込まれ(複数のユーザー、複数のセッションから同じユーザーを考えてみてください)、魅力的ではないかもしれません。もちろん、総ボリュームが管理できない場合は、クライアント上の結果セットをフィルタリングすることもできます。アプリケーションでVBAを使用している場合は、コード内でクエリを生成することができます。常にSQLインジェクションの問題を回避します。 – Pekka

0

はあなたの問題を解決するために、クエリのヘルプを下回ることがある:

declare @Query varchar(max) 
set @Query = 'SELECT * FROM Table1 WHERE Table2.'+ @Column_Name +' in ('+ @Value_List +')' 
exec(@Query) 
関連する問題