亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢Dsl SQL - 左聯接子查詢

查詢Dsl SQL - 左聯接子查詢

慕娘9325324 2022-09-28 14:56:16
我正在使用,我想進行子查詢。這是普通查詢QueryDsl SQLleft joinSQLSELECT  usr.memberId,  payoutsBbf.totalPytsFROM  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 SQLusers我如何處理零件LEFT JOIN x ON如何處理部件中的子查詢別名SELECT payoutBbf.totalPyts
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

這就是我會怎么做的:


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


查看完整回答
反對 回復 2022-09-28
?
富國滬深

TA貢獻1790條經驗 獲得超9個贊

我認為這對你有用。雖然這有點笨拙:


SQLQueryFactory sqlqf; // Should be @Autowired


QUsers qusers = new QUsers();

QPayouts qpayouts = new QPayouts();


Expression<Long> memberId = ExpressionUtils.as(qpayouts.memberId, "mmb_id");

Expression<Double> totalPayouts = ExpressionUtils.as(qpayouts.amount.sum(), "totalPayouts");


SQLQuery<Tuple> payoutsBbf = SQLExpressions.select(memberId, totalPayouts)

            .from(qpayouts)                

            .where(qpayouts.payoutPeriod.lt("2018-01-01")) // Use date object

            .groupBy(qpayouts.memberId);


final SimplePath<? extends SQLQuery> payoutsBBfPath = Expressions.path(payoutsBBfPath.getClass(), "payoutsBbf");


List<Tuple> fetch = sqlqf.select(

        qusers.memberId,                

        Expressions.path(payoutsBbf.getClass(), new PathMetadata(payoutsBBfPath, "totalPayouts", PathType.PROPERTY))

    )

    .from(qusers)

    .leftJoin(payoutsBbf, payoutsBBfPath)

    .addJoinFlag(" on payoutsBbf.mmb_id = users.id", JoinFlag.Position.BEFORE_CONDITION)

    .fetch();

請注意使用定義為 的別名來指定連接列。另請注意使用 在部分中指定子列payoutsBbfExpressions.path()select()


查看完整回答
反對 回復 2022-09-28
  • 2 回答
  • 0 關注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號