我的命名查询很长,因为使用Like with OR作为对象树非常大。我们可以在命名查询中一起使用Like和In:
#Mysql
@NamedQuery(name="getDhahush", query="SELECT d.pid FROM Dhahush d WHERE lower(d.person.telephon.mobile.mobno) LIKE lower('78129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('8129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('5159%')")
底层数据库是MySQL。
答案 0 :(得分:0)
LIKE 不能与IN
结合使用{
"calls": [
{
"accound_sid": "1234",
"api_version": "2010-04-01",
"date_created": "Wed, 18 Aug 2010 20:20:06 +0000",
"etc": "etc",
},
{
"accound_sid": "4321",
"api_version": "2010-04-01",
"date_created": "Wed, 18 Aug 2010 20:20:06 +0000",
"etc": "etc",
}
]
}
但是我会从较低位置删除较低位置(d.person.telephon.mobile.mobno),因为首先它是一个数字并且不需要更低,其次最重要的是,lower()函数将无法使用任何索引专栏已经到位" mobno" 欢呼声。
答案 1 :(得分:0)
使用ANY代替。
您的查询在PostgreSQL中变成类似的东西:
select 'foo' like any(array['f%', '%o%', '&t']);
MySQL并不支持这种确切的语法,但您可以使用子查询执行类似的操作:
select 'foo' like any( select 'f%' union select '%o%' union select '&t');