IN子句中的SQL多列转换为JPA

时间:2017-05-30 16:53:22

标签: sql oracle hibernate jpa orm

我想将以下查询转换/翻译为IN子句中的多个列到JPA

查询:

SELECT city FROM user WHERE (firstName, lastName) IN (('a', 'b'), ('c', 'd'));

2 个答案:

答案 0 :(得分:2)

我不知道JPA是什么(我可以谷歌它;我的意思是我不熟悉它);但是:如果有任何希望处理SQL查询,唯一的问题是在元组上转换条件,那么重写查询,如下所示:

select city 
from   user
where  firstname = 'a' and lastname = 'b'
   or  firstname = 'c' and lastname = 'd'
;

这是查询引擎无论如何都会对原始查询执行的操作;你可以看一下EXPLAIN PLAN来说服自己。

有些人喜欢在每对AND连接条件周围加上括号;我不会比2 * 3 + 4 * 6使用括号更多,但如果你觉得它们增加了清晰度,你可以添加它们。

答案 1 :(得分:1)

你可以使用某种子查询,我认为它比一组明确定义的对更相关(对于更复杂的情况,你也可以用or语句堆叠):

SELECT city 
FROM user 
WHERE (firstName, lastName) IN (
     select stringOne, stringTwo from TableOne t ...
   )
   or
   (firstName, lastName) IN (
     select stringOne, stringTwo from TableTwo t ...
   )