为何两段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
相关产品推荐
相关产品推荐

