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

为何两段WHERE条件看似一致的PROC SQL查询结果不同?

两段PROC SQL查询结果不一致的原因

核心逻辑差异

  • 第一段是单表筛选:用OR条件判断t1.names是否匹配任意一个关键词,只要符合条件,这条t1记录就保留一次——哪怕它同时匹配多个关键词,也只会出现一回。
  • 第二段是双表笛卡尔关联:t1和t2做全量关联,只要t1.names匹配t2里的某一个关键词,就会生成一条包含t1和t2对应行的结果。要是一条t1记录能匹配t2里的N个关键词,结果里这条t1就会重复N次。

其他可能的影响点

  • 如果t2.names里有重复的关键词(比如name1出现两次),第二段查询会为这个重复值多生成记录,第一段完全不受影响。
  • 要是t2里存在空的names值,contains ''或者index(..., '')会判定为匹配成功,直接导致所有t1记录都被选中并重复,结果集会瞬间膨胀。
  • 你换index替代contains没用,因为两者的核心问题不是匹配函数,而是查询的逻辑框架——一个是单表去重筛选,一个是双表关联生成重复记录。

直观示例

假设t1有一条记录:names = 'name1 name2',t2的names列存了name1、name2两个值:

  • 第一段查询结果:只有1行,就是这条t1记录。
  • 第二段查询结果:会出2行,分别是t1+t2.name1、t1+t2.name2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:55:03