Laravel中SQL CASE表达式内两列相减的语法错误解决方法
修正Laravel中CASE表达式的语法错误,实现自定义字段计算
你的CASE表达式触发语法错误,核心原因是两个SQL语法规范问题:CASE语句必须用END闭合,且字段别名AS要放在整个CASE表达式的末尾,不能写在分支内部。
正确的实现代码如下:
public static function getAllData() { $records = DB::table('orders as t1') ->leftjoin('payments as t2', 't1.ord_id', '=', 't2.pay_ord_id') ->select(DB::raw("CASE WHEN t2.pay_type_id = 190 THEN t1.ord_total - t2.pay_amount ELSE 0 END AS Paid_Amount_Online"), // 此处添加其他需要查询的字段 ) ->get(); return $records; }
额外注意事项:
- 给
pay_type_id加上表别名t2.,避免多表关联时出现字段歧义 - 增加
ELSE 0分支,确保当pay_type_id不等于190时,Paid_Amount_Online字段有默认值,导出Excel时不会出现空值 - 整个CASE表达式必须以
END收尾,这是SQL语法的强制要求
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

