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

SQL Server中WHERE子句如何对比列值?Document前缀匹配过滤问题

原语句问题分析

  • 过滤A表时仅筛选了Client = 'AAA' AND Code = 1,直接遗漏了要求中「Client为'AAA'且Code等于1或2」里Code=2的行
  • 采用左连接拼接关联行的逻辑,若单条A表记录匹配多条B表记录会生成重复行,且无法单独返回符合条件的独立行
  • 匹配池仅覆盖了AAA且Code=1的Document值,没有把所有Client为AAA的行的Document都作为匹配依据,会漏掉匹配其他AAA行Document的记录

正确查询语句

需求本质是匹配两类独立的行,直接拆分两类规则查询后合并即可,逻辑清晰无重复:

-- 第一类:Client为AAA且Code为1/2的行
SELECT Client, Code, Document 
FROM MyTable 
WHERE Client = 'AAA' AND Code IN (1,2)

UNION ALL

-- 第二类:其余行中Document前三位匹配任意AAA行Document值的行
SELECT Client, Code, Document
FROM MyTable 
WHERE Client <> 'AAA'
AND LEFT(Document,3) IN (
    SELECT Document FROM MyTable WHERE Client = 'AAA'
)

逻辑验证

代入你提供的示例数据运行:

  1. 第一类查询返回行:AAA 1 001
  2. 第二类查询中,仅001-01的Document前三位001存在于AAA行的Document集合(001、002)中,返回行:001-01 2 001A
    最终结果和你给出的预期完全一致。

如果要兼容同一条行同时满足两类规则的极端场景,把UNION ALL改为UNION自动去重即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 00:06:03