我想优化 SQL 查询,其中同一个表的不同列与 or 条件中另一个表的列进行比较

问题描述 投票:0回答:1

我有 2 个表(t1 、 t2),其中包含 A1、A2、A3 列。我想编写一个 SQL 查询,它返回表 t1 中的行,其中 A1 列值与表 t2 相同,但 A2 或 A3 或两个列值不同。

此查询完成了工作,但似乎没有优化:

select t1.A1, t1.A2, t1.A3 
from t1 
where t1.A3 not In (select A3 from t2 where t2.A1 = t1.A1) 
   or t1.A2 not In (select A2 from t2 where t2.A1 = t1.A1);
sql subquery query-optimization
1个回答
0
投票

你可以这样做:

select *
from t1
where exists (
  select 1 
  from t2 
  where t2.a1 = t1.a1 and (t2.a2 <> t1.a2 or t2.a3 <> t1.a3)
)

为了提高查询性能,您可以添加索引:

create index ix1 on t2 (a1, a2, a3);
© www.soinside.com 2019 - 2024. All rights reserved.