我正在与jOOQ进行此次通话:
List<StoreRecord> fetchInto = this.ctx
.select(Store.STORE.NAME)
.from(Store.STORE)
.join(StoreAdminStore.STORE_ADMIN_STORE)
.on(StoreAdminStore.STORE_ADMIN_STORE.ID.eq(id))
.where(Store.STORE.ID.eq(StoreAdminStore.STORE_ADMIN_STORE.STORE_ID))
.fetchInto(StoreRecord.class);
for (StoreRecord store: fetchInto) {
LOGGER.debug(store.getName());
}
哪个应该复制这个PostreSQL语句:
SELECT
store.name
FROM store
JOIN store_admin_store ON store_admin_store.store_admin_id = 1
WHERE store.id = store_admin_store.store_id
然而,jOOQ为我提供了一个仅包含一个 StoreRecord
的列表,即使这里有五个条目符合某些条件..
我做错了什么?
答案 0 :(得分:0)
您的jOOQ查询和您的SQL查询不一样。
jOOQ查询:
-- Is
STORE_ADMIN_STORE.ID.eq(id)
-- Should be
STORE_ADMIN_STORE.STORE_ADMIN_ID.eq(id)
SQL查询:
store_admin_store.store_admin_id = 1
就像现在一样,您的查询只从关系表(ID = 1
)返回一行,然后只将单个相关商店加入其中。
除此之外,您应该在ON
子句和WHERE
子句之间切换谓词。现在,您将连接谓词放在WHERE
子句中,而过滤谓词位于ON
子句中......