我正在使用QueryDsl SQL
并且我想要左连接
子查询。这是纯 SQL
SELECT
usr.memberId,
payoutsBbf.totalPyts
FROM
users usr
LEFT JOIN
(SELECT
pyt.member_id AS mmb_id,
SUM(pyt.amount) AS totalPyts
FROM
payout pyt
WHERE
pyt.payoutPeriod < '2018-01-01'
GROUP BY pyt.member_id) AS payoutsBbf ON usr.id = payoutsBbf.mmb_id
我希望用QueryDsl SQL
编写它,并且子查询与主表users
保持连接几乎很重要,因为这只是整个复杂的一个片段查询。
如何处理
LEFT JOIN x ON
部分如何处理
SELECT payoutBbf.totalPyts
部分中的子查询别名
最佳答案
这就是我要做的:
final StringPath payoutsBbf = stringPath("payoutsBbf");
final String mmbId = "mmb_id";
final String totalPyts = "totalPyts";
sqlQueryFactory.select(users.memberId, stringPath(payoutsBbf, totalPyts))
.from(users).leftJoin(
sqlQueryFactory.select(payout.member_id.as(mmbId), member_id.amount.sum().as(totalPyts))
.from(payout).where(payout.payoutPeriod.lt("2018-01-01")).groupBy(payout.member_id),
payoutsBbf
).on(users.id.eq(stringPath(payoutsBbf, mmbId))).fetch();
关于java - QueryDsl SQL - 左连接子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55580301/