1

col1、co12、...の 5 つの列を持つテーブルがあります。各列を検索する 5 つの検索パラメーターがあります。すべての一致結果を返す mySQL クエリを作成する必要があります。検索パラメーターに値を指定しないと、無視されます。

私はこれを持っていたが、それは動作しません

select * from tableA
where ((col1 IS NULL AND srch1 IS NULL) OR (col1 like srch1))
and ((col2 IS NULL AND srch2 IS NULL) OR (col2 like srch2))
etc...
4

3 に答える 3

0

「機能しない」とlikeは、条件の一部が機能していないことを意味すると思います。

これは、検索文字列を%文字で囲んで「いいね」検索語を形成する必要があるためです。これを試して:

select * from tableA
where ((col1 IS NULL AND srch1 IS NULL) OR col1 like concat('%', srch1, '%'))
and ((col2 IS NULL AND srch2 IS NULL) OR col2 like concat('%', srch2, '%'))
etc...


あなたはかなり近かったです!

于 2012-11-14T23:28:07.160 に答える
0
Select * from tableA where
col1 like '%' + Coalesce(srch1,col1) + '%' and
col2 like '%' + Coalesce(srch2,col2) + '%'
于 2012-11-14T23:14:57.173 に答える
0

各条件を括弧内に OR し、最初に null をテストすることで、条件を事前に修飾し、残りの半分を無視します。値がある場合は、対応する列に対してテストされます。そうは言っても、「LIKE」修飾子が本当に必要な場合は、ワイルドカード一致のために「%」を期待するか、追加する必要があるかもしれません。

select
      A.* 
   from 
      tableA  A
   where 
          (srch1 is null OR col1 like srch1)
      AND (srch2 is null OR col2 like srch2)
      AND (srch3 is null OR col3 like srch3)
      AND (srch4 is null OR col4 like srch4)
      AND (srch5 is null OR col5 like srch5)

したがって、srch3 パラメータのみを指定した場合、答えは次のように解釈されます。

where 
       TRUE
   and TRUE
   and col3 like srch3
   and TRUE
   and TRUE

srch以来?is null が最初に true になり、残りのテストは無視されます。

于 2012-11-14T23:55:00.367 に答える