> Is there a way to programmatically scope the id field on a and b in order to > produce the join?
In general, that's what the Table.getField() methods are for. If the table is aware of the fields it contains, you can get a new "scoped" field with the scope of the relevant table alias "a" or "b", to produce "a"."ID" or "b"."ID". However, this doesn't work with tableByName (I wonder if there would be a way to enhance jOOQ for it to work?) The best approach for you might be to re-create those artefacts that are generated by jOOQ. You don't have to generate them, you can create them on-the-fly. In essence, tables extend TableImpl (http://www.jooq.org/javadoc/latest/org/jooq/impl/TableImpl.html) and fields within a table are created using createField ( http://www.jooq.org/javadoc/latest/org/jooq/impl/TableImpl.html#createField%28java.lang.String,%20org.jooq.DataType,%20org.jooq.Table%29 ). Beware though, that using jOOQ's internals may lead to issues when upgrading in the future.
