2016-08-17 3 views
1

jueq를 사용하여 명령 줄에서 DSLContext 쿼리로 작성 및 테스트 한 쿼리를 변환하려고하는데 문제가 발생했습니다. 아래 쿼리는 like 매개 변수와 일치하는 태그 목록을 JSONB 열 "tags"가있는 테이블 "캠페인"의 와일드 카드로 반환하기위한 것입니다. 이 열은 다음과 같은 방식으로 서식 값이 :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

관련 문제