我有三个表A、B、C,其中A对应B是多对一的关系,而B对应C也是多对一的关系。我想要列出A中所有C的列表。
我的表格大致如下:A[id, valueA, lookupB]、B[id, valueB, lookupC]、C[id, valueC]。我写了一个带有两个嵌套SELECT的查询,但我想知道是否可能使用DISTINCT来进行INNER JOIN。
我的表格大致如下: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慢很多个数量级)。