我有 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);
你可以这样做:
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);