2016-01-24 94 views
3

請建議JOOQ DSL來查詢布爾表達式的結果
在SQL我會寫:JOOQ查詢

SELECT sum(apples.quantity) > sum(bananas.quantity) 
FROM ... 
+0

的可能的複製[如何執行IF ... THEN在SQL SELECT?](http://stackoverflow.com/questions/63447/how-to-執行一個如果然後在一個SQL選擇) – APC

回答

4

爲了得到一個jOOQ Condition爲您和對比,簡單地寫:現在

Condition condition = sum(apples.quantity).gt(sum(bananas.quantity)); 

Condition類型目前還無法投入在jOOQ的SELECT條款,但可以使用DSL.field(Condition)他們包裝:

Field<Boolean> field = field(sum(apples.quantity).gt(sum(bananas.quantity))); 

jOOQ將負責確定您的SQL方言是否允許將謂詞用作列表達式(例如, MySQL,PostgreSQL,SQLite),還是需要使用等效的CASE表達式(例如DB2,HANA,Oracle,SQL Server)來模擬。

導致:

Record1<Boolean> result = 
DSL.using(configuration) 
    .select(field(sum(apples.quantity).gt(sum(bananas.quantity)))) 
    .from(...) 
    .fetchOne(); 
+0

jOOQ就像甜甜圈,有什麼它不能做?現在可能的改進是在Condition上使用asField()方法,這樣在使用IDE.e.g時會更易於發現。 sum(apples.quantity).gt(sum(bananas.quantity))。asField() – Aner

+0

@Aner:的確,有這樣一個方法會與其他API一致(例如'FieldLike.asField()'),但事實上,'asField()'(和'asTable()')方法有一個很大的缺點:它們不能被通用化,就像這裏顯示的'field()'方法。 –