我有三个表,A、B、C,其中 A 是多对一 B,B 是多对一 C。我想要 A 中所有 C 的列表。
我的表是这样的:A[id,valueA,lookupB],B[id,valueB,lookupC],C[id,valueC]。我已经用两个嵌套的 SELECT 编写了一个查询,但我想知道是否有可能以某种方式使用 DISTINCT 进行 INNER JOIN。
SELECT valueC
FROM C
INNER JOIN
(
SELECT DISTINCT lookupC
FROM B INNER JOIN
(
SELECT DISTINCT lookupB
FROM A
)
A2 ON B.id = A2.lookupB
)
B2 ON C.id = B2.lookupC
编辑:表相当大,A 是 500k 行,B 是 10k 行,C 是 100 行,所以如果我做一个基本的内部连接并最后使用 DISTINCT,就会有很多不必要的信息,如下所示:
SELECT DISTINCT valueC
FROM
C INNER JOIN B on C.id = B.lookupB
INNER JOIN A on B.id = A.lookupB
这非常非常慢(比我上面做的嵌套 SELECT 慢几倍。