2

簡単なJPQLクエリがあります。(ただし、これはSQLクエリにも当てはまります。)

FROM DomainObj d where d.field1 like 'TEST%' and d.field2 like '%';

DBに次の行が含まれている場合:

1)フィールド1->'テスト'; field2-> null

クエリは何も返しません!

DBに次の値が含まれている場合:

2)filed1->'TEST'; field2->''

クエリは行を返します!

クエリを可能な限り単純に保ちながら、「%」のように検索するときにnull値も含めるにはどうすればよいですか(回避および/または句?)

私はデータベース内のエンティティの検索機能を実装しています。また、同時に多くのフィールドで検索します。

ありがとうマルコ

4

5 に答える 5

8

nullはそれ自体を含むすべてのものと等しくないため、等式テストでnullを直接使用することはできません。そのため、次のようなis nullテストがあります。

select null = null -> null
select null <> null -> null
select 1 = null -> null
select 1 <> null -> null
select 1 + null -> null

本質的にnullは伝染性であり、比較または追加されたものはすべて無効になります。

そうです、あなたはしなければなりません

SELECT ... WHERE somefield LIKE '%...%' or somefield IS NULL
于 2013-01-15T14:30:13.350 に答える
2

これを試して:

...
and IFNULL(d.field2, '') like '%'
于 2013-01-15T14:30:22.757 に答える
1
...
where ...
and (field2 = '' or field2 is null)

field2 like '%'null以外のテキストと一致するため、この条件は無意味であることに注意してください。これに追加or field2 is mullすると、すべてに一致するため、論理的には、field2の条件を削除する必要があります。

于 2013-01-15T14:30:16.767 に答える
0

使用IS NULL

where d.field1 like 'TEST%' OR d.field2 IS NULL;
于 2013-01-15T14:30:25.627 に答える
0
FROM DomainObj d where (d.field1 like 'TEST%' or d.field1 IS NULL) and (d.field2 like '%' or d.field2 IS NULL)
于 2013-01-15T14:30:45.627 に答える