検索

ホームページ  >  に質問  >  本文

java - 如何解决where name like '%%' 当name 为null时,查询不到数据?

PHP中文网PHP中文网2881日前1900

全員に返信(12)返信します

  • 巴扎黑

    巴扎黑2017-04-18 10:46:56

    選択

    リーリー

    から

    リーリー

    どこで

    リーリー

    そして concat のような名前(

    リーリー

    名前のトラブルシューティングを書きました。他のものはご自身で確認してください。最善の解決策ではない可能性があります

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:46:56

    必ずしもSQLでなくても、ビジネスロジックで書くことができます

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:46:56

    データベース フレームワークが使用されているかどうかはわかりません。使用されている場合は、通常、対応するソリューションがあります。
    たとえば、mybatis では、iftest を使用して like ステートメントを実行する必要があるかどうかを判断できます。

    もう 1 つの方法は、IF(expr1,expr2,expr3) や IF ELSE などのデータベース自体の関数を使用することです

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    フロントエンドに入力パラメータがない場合、なぜこのフィールドの結果をクエリする必要があるのでしょうか?これはビジネスロジックに違反していませんか?

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    where IFNULL(name, '') like '%xx%' および IFNULL(method, '') like '%xx%'
    name が < の場合code>null空の文字列に変換すると、%%が一致します。 where IFNULL(name, '') like'%xx%' and IFNULL(method, '') like '%xx%'
    如果namenull将其转换为empty string%%就能匹配上了。


    不过我认为最好的做法还是使用SQL的地方增加逻辑判断会比较好一些,改动量应该非常少,只需要几句代码就搞定了。题主可以看看@家常菜 的SQL增加一个where 1=1的条件,那if <時間>

    ただし、SQL を使用して論理的な判断を追加するのが最善の方法だと思います。変更の量は非常に少なく、数行のコードのみで完了します。質問者は @家客菜 の SQL を見て where 1=1 条件を追加すると、< に条件を追加するのが非常に簡単になります。 code>if 条件。 🎜

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

    ビジネス ロジック層で記述するのが最善です (この層はこの層が行うことになっています)。これは非常に不合理で非効率です。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:46:56

    簡単な方法は、テーブル内のnull値を「」に変換することです
    where ifnull(name,'') like'%%' and ifnull(method,'') like '%%'
    効率を考えなければこれで十分です

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:46:56

    質問者は、インターフェイス上のクエリ条件を SQL ステートメントの Where 条件に単純に接続したいと考えています。これは確かにプログラム処理にとって非常に便利ですが、セキュリティ上の理由から、これは行わない方がよいでしょう。 SQLインジェクション。

    内部アプリケーションの場合、この環境は確かに非常に安全です。パフォーマンスを考慮すると、このパラメーターを使用せずに、対応する where 句をスプライスしないでください。 Java では次のように記述できます:

    リーリー

    *以下は仮定です:

    1. nameStrとmethodStrはそれぞれインターフェースから取得したユーザー入力内容です。ユーザーが入力しない場合、結果はnull

    2. ではなく空の文字列になります。
    3. xxxxxx は他の where 条件です。実際に他に条件がない場合は、「where」文字列自体を処理する必要があります*

    返事
    0
  • 怪我咯

    怪我咯2017-04-18 10:46:56

    データベースのデフォルト値がnullの場合、または取得した値がnullの場合はnuに変更します。 。

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:46:56

    ここで name='' または Method ='' または '%%' のような名前と '%%' のようなメソッド

    返事
    0
  • キャンセル返事