2012-12-28 22 views
11

我在jOOQ以下查詢:如何使用帶連接的查詢從jOOQ中的一個表中進行選擇?

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

該查詢返回給我一個記錄有由個人與ENDUSER所有列,但我只希望從人的列(這就是爲什麼我把.from(PERSON),而不是.from(PERSON, ENDUSER)) 。 我知道這並不重要,但我不希望返回不必要的字段。

+0

我有點拿不定主意,這是否是http的副本://stackoverflow.com/q/5832803/521799,實際上 –

回答

14

你可以通過Table.fields()方法訪問PERSON領域:

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

這是大致相同寫

SELECT PERSON.* 
FROM PERSON 
JOIN ENDUSER ... 

另一種方法是通過實際列出的人一個所有字段一個

+0

謝謝盧卡斯,那就是我一直在尋找的! – islon

7

盧卡斯的回答正是我一直在尋找的。您也可以使用into()方法得到一個強類型的響應對象回來只有你所關心的(而不是一般Record型)表:

PersonRecord record = factory() 
    .select() 
    .from(PERSON) 
    .join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID)) 
    .where(ENDUSER.ID.equal(userId)) 
    .fetchOne() 
    .into(PERSON); 
相關問題