2013-05-28 70 views
1

多個字段的條件,我想寫出像JOOQ如何編寫與jooq

AND (id,name) IN (('id1','name1'),('id2','name2'),...) 

下面我想這句法

Condition condition= DSL.concat(idField,nameField).in(""); 

產生

條件
concat(cast(`id` as char), cast(`name` as char)) in ('id1name1',"id2name2",....)) 

但是這種解決方案通過跳過索引導致巨大的性能問題

我不如何​​讓這兩個領域共同

感謝您的幫助

+0

發佈你試過的東西? –

回答

2

不要使用字符串連接的線索的時候,其實你想使用行值表達式謂詞!使用jOOQ的行值表達式支持如下記載: http://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/row-value-expressions

或者更具體地說:

// import static org.jooq.impl.DSL.row; 
Condition condition = row(ID, NAME).in(row("id1", "name1"), row("id2", "name2")); 

您可能需要抑制由於通用可變參數參數的警告在Row2.in(Row2...)

如果你的目標數據庫沒有按不支持行值表達式,jOOQ將上述擴展到這個謂詞

(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2') 
+0

感謝偉大的工作 – mmounirou