2012-12-28 9 views
11

Ich habe die folgende Abfrage in jOOQ:Wie wählt man aus nur einer Tabelle in jOOQ eine Abfrage mit einem Join?

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

Diese Abfrage mir gibt einen Datensatz mit allen Spalten von Person und beim Anwender, aber ich möchte nur die Spalten von Person (das ist, warum ich .from(PERSON) und nicht .from(PERSON, ENDUSER) setzen) . Ich weiß, dass es nicht so wichtig ist, aber ich möchte nicht, dass unnötige Felder zurückgegeben werden.

+0

Ich bin ein wenig unschlüssig, ob dies ein Duplikat http : //stackoverflow.com/q/5832803/521799, eigentlich –

Antwort

14

Sie können auf die Felder in PERSON durch die Table.fields() Methode:

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

Das ist ungefähr das Gleiche wie

SELECT PERSON.* 
FROM PERSON 
JOIN ENDUSER ... 

Eine weitere Option ist das Schreiben tatsächlich die Felder alle von Person Liste eins nach dem ein

+0

Danke Lukas, genau das habe ich gesucht! – islon

7

Lukas Antwort war genau das, was ich suchte. Sie können auch die into() Methode verwenden, um ein stark typisierte Antwortobjekt nur für die Tabelle, die Sie interessieren zurück zu bekommen (anstelle dem allgemeinen Record Typs):

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