QueryDsl SQL - 左连接子查询

Kih*_*ats 3 java mysql querydsl spring-data

我正在使用QueryDsl SQL并且我想要left join一个子查询。这是简单的查询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
Run Code Online (Sandbox Code Playgroud)

我希望将其写入QueryDsl SQL,并且将子查询保留到主表中几乎很重要,users因为这只是整个复杂查询的一个片段。

  1. 我该如何处理该LEFT JOIN x ON部分

  2. 如何处理部分中的子查询SELECT payoutBbf.totalPyts别名

rav*_*ven 6

我就是这样做的:

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();
Run Code Online (Sandbox Code Playgroud)