Search code examples
javamysqlspring-dataquerydsl

QueryDsl SQL - Left Join a subquery


I am using QueryDsl SQL and I want to left join a subquery. Here is the query in plain 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

I wish to write it in QueryDsl SQL and is almost important that the subquery is left joined to the main table users coz this is just a snippet of the whole complex query.

  1. How do I deal with the LEFT JOIN x ON part

  2. How do I deal with the subquery alias in the SELECT payoutBbf.totalPyts part


Solution

  • this is how I would do it:

    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();