2012-05-07 42 views
2

鑑於熟了PreparedStatement以下Oracle SQL查詢:什麼是JPQL中的SQL ANY運算符等價物?

SELECT * 
FROM my_table 
WHERE field1 = 'foo' 
and field2 =ANY (substr(? , 1, 2) || '00000000', 
       substr(? , 1, 4) || '000000', 
       substr(? , 1, 6) || '0000', 
       substr(? , 1, 8) || '00', 
       ? 
       ) 

我想轉換爲JPQL查詢。讀取JPQL文檔substr變爲substringANY保持原樣。在JPQL ANY期望子查詢。

如何將列表更改爲子查詢?或者我應該使用IN運算符,還是應該生成一個帶有一堆OR條件的JPQL字符串?

的Oracle 10gR2中
Java 5的
JPA 2

+1

使用'in',這很容易。 – Ben

回答

6

考慮到= ANY(...)相當於SQL IN (...),你可以放心地使用。

事實上,IN謂詞是根據ANY謂詞定義的。所述SQL 1992標準的摘錄:

8.4謂詞<>

[...]

<in predicate> ::= 
    <row value constructor> 
     [ NOT ] IN <in predicate value> 

[...]

2)設RVC是<行值構造函數>並讓IPV成爲謂詞值中的<>。

[...]

4)表達

RVC IN IPV 

相當於

RVC = ANY IPV 

再然後,在ANY/SOME<quantified comparison predicate>運營商的方式定義類似於一堆連接謂詞的OR。因此答案是:您可以同時使用INOR連接的謂詞。

注意:儘管這個答案解釋了它們在SQL中的含義,但我相當確定類似的東西也適用於JPQL。

+0

Tks for you response!我將使用IN運算符 – Stephan

相關問題