hql中的案例条件
Case condition in hql
我想通过这个查询实现的是:始终执行“母亲”条件,但如果没有母亲,则执行“爸爸”条件,这可能吗?
"select name from Person where idParents = :idParents and"
+ " CASE " +
" WHEN idMother !=NULL THEN idMother = :idMother " +
" ELSE idFather = :idFather " +
" END";
这个查询:
select name
from Person
where idParents = :idParents
and 1 = case
when idMother = :idMother then 1
when idFather = :iidFather then 1
end
将首先尝试通过将列 idMother
与 :idMother
相匹配来加入。
如果这不可能,则将使用 idFather
到 :idFather
的匹配项(如果存在)。
这个查询:
select name
from Person
where idParents = :idParents
and 1 = case
when idMother = :idMother then 1
when idMother is null and idFather = :idFather then 1
end
将首先尝试通过将列 idMother
与 :idMother
相匹配来加入。
如果这不可能,则仅当 idMother
为 null
时,才会使用 idFather
到 :idFather
的匹配项(如果存在)。
或者您可能想要这个:
select p.name
from Person p
where p.idParents = :idParents
and (
p.idMother = :idMother
or (
p.idFather = :idFather
and not exists (select 1 from Person where idParents = p.idParents and idMother = :idMother)
)
)
我想通过这个查询实现的是:始终执行“母亲”条件,但如果没有母亲,则执行“爸爸”条件,这可能吗?
"select name from Person where idParents = :idParents and"
+ " CASE " +
" WHEN idMother !=NULL THEN idMother = :idMother " +
" ELSE idFather = :idFather " +
" END";
这个查询:
select name
from Person
where idParents = :idParents
and 1 = case
when idMother = :idMother then 1
when idFather = :iidFather then 1
end
将首先尝试通过将列 idMother
与 :idMother
相匹配来加入。
如果这不可能,则将使用 idFather
到 :idFather
的匹配项(如果存在)。
这个查询:
select name
from Person
where idParents = :idParents
and 1 = case
when idMother = :idMother then 1
when idMother is null and idFather = :idFather then 1
end
将首先尝试通过将列 idMother
与 :idMother
相匹配来加入。
如果这不可能,则仅当 idMother
为 null
时,才会使用 idFather
到 :idFather
的匹配项(如果存在)。
或者您可能想要这个:
select p.name
from Person p
where p.idParents = :idParents
and (
p.idMother = :idMother
or (
p.idFather = :idFather
and not exists (select 1 from Person where idParents = p.idParents and idMother = :idMother)
)
)