2016-02-22 5 views
1

Я использую PostgreSQL 9.4, Spring Boot 1.3.2 и jOOQ 3.7. Я хотел бы «jOOQify» следующий запросИспользование UNNEST с jOOQ

SELECT id FROM users WHERE username IN (SELECT * FROM UNNEST(?)) 

так что я могу запустить его с весны JdbcTemplate, передавая список или массив (в данном конкретном случае, List<String>). Я попытался

DSLContext.select(
    USERS.ID 
) 
.from(
    USERS 
) 
.where(
    USERS.USERNAME.in(...) 
) 

, но я не могу понять, что поместить в .... Я пробовал что-то вроде

DSLContext.select(field("*")).from(unnest(myList)) 

но, к сожалению, компилятору это не нравится. Есть ли простой способ добиться этого?

+0

Можете ли вы передать массив? 'where username = ANY (array)' будет работать –

ответ

1

Компилятор не нравится ваша попытка, потому что USERS.USERNAME является Field<String>, и, таким образом, метод in() ожидает Select<? extends Record1<String>>.

Вы можете это исправить, как например:

select(field("*", String.class)).from(unnest(myList)) 

Или, возможно, немного лучше:

select(field(name("v"), String.class)).from(unnest(myList).as("t", "v")) 
Смежные вопросы