1

我有一个包含字段 f1 和 f2 的表 T1 和一个包含字段 f3 和 f4 的表 T2。

让我们有一些虚拟值:

T1: (1,1) (2,3) (3,3) (4,3) (5,1)
T2: (1,1) (1,2) (3,1) (3,3)

我们可以认为 f2 和 f3 定义相同的东西,是 T1 和 T2 之间的桥梁。我想检索与 f4 值 2 无关的每个 f1 。所以我的预期输出是:

(2),(3),(4) 在 1 和 5 F1 值 F2=F3=1 在 T2 上具有 f4=2。

我怎样才能做到这一点?

编辑 2:我忘了提到 T1 源自一个漫长的过程,预计是一个小表,而 T2 很大,没有索引就无法操作

4

3 回答 3

1

因为 f2 和 f3 是同一个东西,所以你在两个字段之间加入。

select f1 
from t1 
    left join t2 
        on t1.f2 = t2.f3 
        and t2.f4=2
where f3 is null    
于 2012-10-01T08:36:13.580 回答
0

LEFT JOIN 应该为此工作。DISTINCT 可用于避免重复

SELECT DISTINCT f1
FROM T1
LEFT JOIN T2
ON T1.f2 = T2.f3
WHERE T2.f4 IS NULL OR T2.f4 <> 2
于 2012-10-01T09:58:05.697 回答
0
SELECT DISTINCT F1
FROM T1
WHERE (SELECT COUNT(F3) FROM T2 WHERE T1.F2 = T2.F3 AND T2.F4 = 2) = 0
于 2012-10-01T08:32:48.450 回答