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

MySQL错误1054:LEFT JOIN多表查询on clause出现未知列'2021-08-23'问题

错误原因
  • 核心触发点是拼接SQL时没有给日期值加单引号,MySQL将2021-08-23这类日期字面量识别为字段名,因此抛出1054字段不存在错误。
  • 从提供的PHP代码可见,关联isn表的ON条件中,直接将处理后的日期字符串拼接到语句中,没有包裹字符串必需的单引号,MySQL无法将其识别为参数值,默认按照标识符(列名)解析,最终报错。
修复方案

你目前将日期筛选条件写在LEFT JOIN的ON子句中逻辑是正确的,不需要调整位置(如果移到WHERE子句会导致LEFT JOIN退化为INNER JOIN,丢失没有匹配isn表记录的投诉单数据),仅需要修正日期参数的拼接方式即可,两种方案可选:

方案1:手动添加单引号(快速修复)

直接在日期变量的拼接位置前后补充单引号:

$this->db->JOIN('isn as i', 'i.isn_Complain_Number = c.complaint_Job_No AND i.isn_Add_Date BETWEEN "'.str_replace('/', '-', $fromDate).'" AND "'.str_replace('/', '-', $toDate).'"', 'LEFT');

方案2:使用框架转义(更安全,避免SQL注入)

调用CodeIgniter查询构造器的escape方法自动处理引号和特殊字符转义:

$fromDateProcessed = str_replace('/', '-', $fromDate);
$toDateProcessed = str_replace('/', '-', $toDate);
$joinCondition = sprintf(
    'i.isn_Complain_Number = c.complaint_Job_No AND i.isn_Add_Date BETWEEN %s AND %s',
    $this->db->escape($fromDateProcessed),
    $this->db->escape($toDateProcessed)
);
$this->db->JOIN('isn as i', $joinCondition, 'LEFT');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:06:01