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

如何根据下拉多选和文本框输入两个参数过滤SQL查询结果?

现有SQL问题分析

你现有SQL的WHERE条件逻辑拆分后存在逻辑漏洞:

  • 要么满足「未选中任何下拉客户,且(未输入客户名 或 客户ID+名称匹配输入内容)」
  • 要么满足「客户ID在选中的下拉列表内」
    当你同时选中A/B/C且输入A时,第二个条件直接命中所有A/B/C三个ID,完全没触发输入文本的校验逻辑,所以会返回全部选中的客户数据。

修正后SQL

SELECT DISTINCT A.ID, A.NAME, A.DID  
INTO #TMPTBL
FROM MY_LIST A (NOLOCK) 
WHERE 
-- 场景1:未选择任何下拉客户的情况
(@CLIST = '' AND (@CNAME='' OR  (A.ID + A.NAME) LIKE '%'+@CNAME+'%'))
OR 
-- 场景2:已选择下拉客户的情况
(
  A.ID IN (SELECT ListItem FROM GetSplitList(',',@CLIST))
  AND 
  -- 输入为空直接返回所有选中项,不为空则额外校验匹配输入内容
  (@CNAME = '' OR (A.ID + A.NAME) LIKE '%'+@CNAME+'%')
)

逻辑验证

完全匹配你提到的两个业务规则:

  • 选中A/B/C且文本框无输入:@CNAME为空,场景2的第二个校验条件直接放行,返回所有在下拉选中列表内的A/B/C
  • 选中A/B/C且输入A:仅同时满足「ID在A/B/C列表内」且「ID+名称匹配A」的记录才会返回,仅输出A的相关数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:51:01