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

SQL两表对比查询:如何修改左连接语句新增仅表1存在值的标识

问题根因

你当前的写法相当于把LEFT JOIN变成了内连接:LEFT JOIN后右表eg_table2未匹配到的行所有字段都是NULL,你把eg_table2.CCI_PROJECT_ID LIKE '%ARG2%'写在WHERE子句中时,NULL做模糊匹配的结果为非真,这些左表存在、右表无匹配的行就会被直接过滤。

调整方案

  1. 把右表的过滤条件从WHERE子句移到LEFT JOIN的ON关联条件中,保证左表符合part_id筛选条件的行全部保留
  2. 新增标识字段,通过判断右表非空字段(比如关联键PRODNO)是否为NULL,标记数据是否同时存在于表2

修改后的SQL代码

SELECT 
    eg_table1.*,
    eg_table2.*,
    CASE WHEN eg_table2.PRODNO IS NOT NULL THEN 1 ELSE 0 END AS is_exist_in_table2
FROM eg_table1
LEFT JOIN eg_table2 
    ON eg_table1.part_id = eg_table2.PRODNO
    AND eg_table2.CCI_PROJECT_ID LIKE '%ARG2%'
WHERE eg_table1.part_id LIKE "%ARG1%"

逻辑说明

  • 标识字段is_exist_in_table2返回1代表该行数据同时存在于两个表,返回0代表该行仅存在eg_table1、eg_table2无匹配
  • 右表的过滤条件放在ON子句中时,只会过滤右表的匹配行,不会过滤左表的合格数据,左表所有符合part_id LIKE "%ARG1%"的行都会被返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:54:04