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

查询T1中C1和C2值均存在于T2的C3的记录:SQL可行性及替代方案

问题解答

给定SQL的可行性

你编写的这段SQL完全可行,逻辑完全符合需求:通过两个IN子查询分别验证T1的C1、C2值都存在于T2的C3列中,最终筛选出同时满足两个条件的T1记录。

替代方案

1. 使用EXISTS子查询

在多数数据库中,EXISTS的性能表现优于IN(尤其是T2数据量较大时),因为EXISTS找到匹配项后会立即终止当前行的检索,无需遍历整个子查询结果:

SELECT *
FROM T1
WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.C3 = T1.C1)
  AND EXISTS (SELECT 1 FROM T2 WHERE T2.C3 = T1.C2)

2. 使用JOIN关联

通过两次关联T2表分别匹配C1和C2,需注意添加DISTINCT避免重复结果(当T2存在多个匹配值时会产生重复行):

SELECT DISTINCT T1.*
FROM T1
JOIN T2 ON T1.C1 = T2.C3
JOIN T2 AS T2_dup ON T1.C2 = T2_dup.C3

3. 行值匹配(部分数据库支持)

如果你的数据库支持行值构造器(如PostgreSQL、Oracle、MySQL 8.0+),可以用更简洁的写法:

SELECT *
FROM T1
WHERE (C1, C2) IN (SELECT C3, C3 FROM T2)

这种写法直接判断(C1,C2)是否属于T2.C3的笛卡尔积组合,逻辑直观,但兼容性不如前两种方案。

内容的提问来源于stack exchange,提问作者Mukul Varshney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:57:51