2012-12-28 26 views
11

Tôi có truy vấn sau đây trong jOOQ:Làm cách nào để chọn từ một bảng trong jOOQ bằng cách sử dụng truy vấn có tham gia?

factory() 
.select() 
.from(PERSON) 
.join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID)) 
.where(ENDUSER.ID.equal(userId)) 
.fetchOne(); 

Truy vấn này trả về cho tôi một bản ghi với tất cả các cột từ PERSON và enduser, nhưng tôi chỉ muốn các cột từ PERSON (đó là lý do tại sao tôi đặt .from(PERSON) và không .from(PERSON, ENDUSER)) . Tôi biết điều đó không quan trọng lắm nhưng tôi không muốn các lĩnh vực không cần thiết được trả lại.

+0

tôi là một chút lưỡng lự cho dù đây là một bản sao của http : //stackoverflow.com/q/5832803/521799, thực sự là –

Trả lời

14

Bạn có thể truy cập vào các trường trong PERSON thông qua phương pháp Table.fields():

factory() 
.select(PERSON.fields()) // Or getFields() in jOOQ 2.x 
.from(PERSON) 
.join(ENDUSER)... 

Đây là về giống như viết

SELECT PERSON.* 
FROM PERSON 
JOIN ENDUSER ... 

Một lựa chọn khác là để thực sự liệt kê tất cả các lĩnh vực từ người này từng người một

+0

Cảm ơn Lukas, đó chính xác là những gì tôi đang tìm kiếm! – islon

7

Câu trả lời của Lukas chính xác là những gì tôi đang tìm kiếm. Bạn cũng có thể sử dụng phương pháp into() để có được một đối tượng phản ứng mạnh mẽ gõ lại để chỉ bảng mà bạn quan tâm (thay vì chung chung Record type):

PersonRecord record = factory() 
    .select() 
    .from(PERSON) 
    .join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID)) 
    .where(ENDUSER.ID.equal(userId)) 
    .fetchOne() 
    .into(PERSON); 
Các vấn đề liên quan