JOOQ - 如何在一个查询中引用多个(但不是全部)表中的所有字段

问题描述 投票:0回答:1

给定一个包含多个表的查询...

dsl.select(
    CUSTOMERS.ID,
    CUSTOMERS.NAME,
    CUSTOMRS.ADDRESS,
    ORDERS.ID,
    ORDERS.PRICE,
    ORDERS.PRODUCT_ID
    PRODUCTS.NAME,
.from(CUSTOMERS)
.join(ORDERS).on(ORDERS.ID.eq(CUSTOMERS.ORDER_ID))
.join(PRODUCTS).on(ORDERS.PRODUCT_ID.eq(PRODUCTS.ID))
.fetch()

有没有办法编写这个查询而不在代码中列出所有列名?具体来说,有没有一种方法可以获取某些表中的所有列,但只能获取某些表中的指定列。

我有兴趣减少在向表添加新列时忘记向查询添加新字段的可能性。此外,我不想使用

.asterik()
/
SELECT *
,因为它存在各种不适合生产的经典问题。

因此,有没有像这个想象中的例子一样的东西?谢谢!

dsl.select(
    CUSTOMERS.columns()
    ORDERS.columns()
    PRODUCTS.NAME,
.from(CUSTOMERS)
.join(ORDERS).on(ORDERS.ID.eq(CUSTOMERS.ORDER_ID))
.join(PRODUCTS).on(ORDERS.PRODUCT_ID.eq(PRODUCTS.ID))
.fetch()
mysql kotlin jooq
1个回答
0
投票

您可以使用

CUSTOMERS.fields()
等并将它们传递给单独的
select()
调用:

dsl.select(CUSTOMERS.fields())
   .select(ORDERS.fields())
   .select(PRODUCTS.NAME)
   ...

或者如果您愿意,您可以直接嵌套

TableRecord

dsl.select(CUSTOMERS, ORDERS, PRODUCTS.NAME)
   ...
© www.soinside.com 2019 - 2024. All rights reserved.