SELECT case when a.value is null || a.`value` = '' || LOCATE('nocheck', a.VALUE) > 0 then '' ELSE a.value end as bgy_contract_project , case when c.value is null || c.`value` = '' || LOCATE('nocheck', c.VALUE) > 0 then '' ELSE c.value end as contract_name FROM ar_approve_entry_result a LEFT JOIN ar_approve_entry_result c ON a.approve_result_uuid = c.approve_result_uuid AND c.entry_UUID = 'AREN1295' INNER JOIN ( SELECT b.uuid, b.pay_comfirm_uuid FROM ar_approve_result b WHERE b.sys_status = 1 AND b.pay_comfirm_uuid = '432d9912f3f14d58a88251d9cd739a6f' ORDER BY b.db_create_sys_time DESC LIMIT 0,1 ) b ON a.approve_result_uuid = b.uuid WHERE a.sys_status = 1 AND a.entry_UUID = 'AREN17324' ; 这个sql分析: 第一点: A LEFT JOIN B (A 表数据一定存在 ,然后 B 表的数据 不一定存在, 所以在 on 后面 紧跟 B表的关联 and c.entry_UUID = 'AREN1295' 这个 关联条件, AREN1295是 履约文件节点的合同名称/工程名称/项目名称,因为这样,即使 B表数据没有,也没有关系, 而 在WHERE 后面加这个AND a.entry_UUID = 'AREN17324' 采购订单的工程名称/项目名称 ,是因为这个是一定存在的) 第二点:case when 的使用 第三点:LOCATE('nocheck', a.VALUE) > 0 使用,这个 的使用 意思是,当 a.VALUE 的值为 nocheck 的时候, LOCATE()这个方法的返回值,就是 大于0 ,接着 就用它作为了 判断条件