2016-08-17 100 views
1

我試圖將我編寫和測試的查詢從命令行轉換爲使用jOOq的DSLContext查詢並遇到問題。下面的查詢旨在從具有JSONB列「tags」的表「campaign」中返回一個匹配類似參數的標記與通配符列表。本欄以下列方式格式化值:將PostgreSQL查詢轉換爲DSLContext

[「狗」,「貓」,「小白兔」]

select distinct A.value 
from campaign T, LATERAL jsonb_array_elements_text(T.tags) A 
where A.value LIKE 't%' 

我試圖通過以下方式來創造這一個DSLContext但我得到錯誤「ERROR:AND的參數不能返回一個集合」。任何人都可以看到我能做些什麼來解決這個問題,並從我的PostgreSQL查詢和我的DSL查詢下面產生相同的結果?

final Field<String> tagField = field("jsonb_array_elements_text(tags)", String.class); 

final Table<Record1<String>> lateral = 
    lateral(sql.dsl().select(a).from(CAMPAIGN)).asTable(); 

final Result<Record1<String>> tag = sql.dsl() 
.select(tagField) 
.from(CAMPAIGN, lateral) 
.where(tagField.like("t")) 
.fetch(); 

回答

1

你的查詢將轉換爲jOOQ這樣:

Field<String> value = field(name("A", "value"), String.class); 
sql.dsl() 
    .selectDistinct(value) 
    .from(
     CAMPAIGN, 
     lateral(table("jsonb_array_elements_text({0})", CAMPAIGN.TAGS)).as("A")) 
    .where(value.like("t%")) 
    .fetch(); 
+0

謝謝!它看起來像那樣。你是救生員 – thurmc