You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套RIGHT JOIN语句转换为Laravel Query Builder写法?

解决方案:将嵌套RIGHT JOIN转换为Laravel Query Builder写法

你的原SQL是嵌套结构的RIGHT JOIN,需要用Laravel Query Builder的闭包或子查询方法来实现,以下是两种可行的写法:

方法一:使用闭包嵌套JOIN

->rightJoin(function ($join) {
    // 定义子查询中的RIGHT JOIN:tlkpSUDesc RIGHT JOIN tblSU
    $join->from('tlkpSUDesc')
         ->rightJoin('tblSU', 'tlkpSUDesc.SUDescCode', '=', 'tblSU.SUDescCode');
}, function ($join) {
    // 外层RIGHT JOIN的连接条件
    $join->on('tlkpSUTyp.SUTypCode', '=', 'tblSU.SUTypCode');
})

方法二:使用rightJoinSub子查询方法

// 先定义子查询
$subQuery = DB::table('tlkpSUDesc')
    ->rightJoin('tblSU', 'tlkpSUDesc.SUDescCode', '=', 'tblSU.SUDescCode');

// 将子查询作为右表进行RIGHT JOIN
$query->rightJoinSub($subQuery, 'sub', function ($join) {
    $join->on('tlkpSUTyp.SUTypCode', '=', 'sub.SUTypCode');
});

你的两种写法问题分析

  • 第一种写法:

    • 闭包内的on方法参数错误,正确格式应为$join->on('关联字段1', '=', '关联字段2'),不需要把表名放在第一个参数位置。
    • 语法不完整,闭包结束后缺少逗号,导致后续的连接条件无法被正确解析。
  • 第二种写法:

    • 没有处理嵌套结构,连续执行两次独立的RIGHT JOIN会改变原SQL的逻辑。原SQL是先让tlkpSUDesc与tblSU完成RIGHT JOIN,再将结果与tlkpSUTyp做RIGHT JOIN;而连续的RIGHT JOIN会让tlkpSUTyp先关联tlkpSUDesc,再关联tblSU,逻辑完全不符。

内容的提问来源于stack exchange,提问作者stanhook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:15:30