如何查询table1中存在、table2无对应数据但ISIN匹配的记录
解决你的SQL查询需求
我懂你要的效果了——你想从table1里捞这样的记录:
- 这条记录本身不在
table2里 - 它的
ISIN值确实存在于table2中 - 还要限定
SecID-by_Bank为12456
你之前的查询只做了“记录不在table2”的判断,没加上“ISIN必须在table2里有匹配”的条件,所以才会返回所有不在table2的记录。下面给你两种可行的写法:
方法一:用双重EXISTS子句(推荐,性能更稳定)
SELECT tb1_ISIN, tb1_SecID_by_Bank FROM table1 WHERE tb1_SecID_by_Bank = 12456 -- 第一重:确保当前记录的ISIN在table2里有对应值 AND EXISTS ( SELECT 1 FROM table2 WHERE table2.tb2_ISIN = table1.tb1_ISIN ) -- 第二重:确保这条具体的记录(用ISIN+SecID组合唯一标识)不在table2里 AND NOT EXISTS ( SELECT 1 FROM table2 WHERE table2.tb2_ISIN = table1.tb1_ISIN AND table2.tb2_SecID_by_Bank = table1.tb1_SecID_by_Bank );
方法二:用IN+NOT EXISTS(逻辑更直观)
SELECT tb1_ISIN, tb1_SecID_by_Bank FROM table1 WHERE tb1_SecID_by_Bank = 12456 -- 直接限定ISIN必须在table2的ISIN集合里 AND tb1_ISIN IN (SELECT tb2_ISIN FROM table2) -- 排除掉那些已经在table2里的完整记录 AND NOT EXISTS ( SELECT 1 FROM table2 WHERE table2.tb2_ISIN = table1.tb1_ISIN AND table2.tb2_SecID_by_Bank = table1.tb1_SecID_by_Bank );
小提示
如果你的表有专门的主键(比如ID字段),那第二个NOT EXISTS子句里可以直接用主键匹配,这样判断记录是否存在会更准确高效,不用依赖ISIN+SecID的组合。
内容的提问来源于stack exchange,提问作者udigold
相关产品推荐
相关产品推荐

