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

如何查询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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:44