MS-Access SQL如何从两列中选取存在于另一张表的对应值
MS Access 双列匹配校验表SQL查询解决方案
原代码问题
你编写的Switch逻辑本身符合需求,但是没有过滤两列均不在校验表中产生的Null结果行,导致返回了不需要的无效数据。
正确写法
版本1:适配原有逻辑的修正版
保留你原有的Switch判断逻辑,新增WHERE条件过滤无效行:
Select Switch( DataA in (SELECT DataC FROM CheckTable), DataA, DataB in (SELECT DataC FROM CheckTable), DataB ) AS Result FROM SourceTable WHERE Switch( DataA in (SELECT DataC FROM CheckTable), DataA, DataB in (SELECT DataC FROM CheckTable), DataB ) IS NOT NULL;
该写法优先返回每行DataA的匹配值,仅当DataA无匹配时返回DataB的匹配值,每行最多返回1个结果。
版本2:更高性能的去重版
用UNION合并两列的匹配结果,自动去重,执行效率更高:
SELECT DataA AS Result FROM SourceTable WHERE DataA IN (SELECT DataC FROM CheckTable) UNION SELECT DataB AS Result FROM SourceTable WHERE DataB IN (SELECT DataC FROM CheckTable)
该写法会提取两列中所有符合条件的值,自动去除重复值,刚好匹配你给出的场景期望输出。
内容的提问来源于stack exchange,提问作者SHA-256
相关产品推荐
相关产品推荐

