gpt4 book ai didi

sql - 在 SQL 中使用 DISTINCT 内连接

转载 作者:行者123 更新时间:2023-12-03 07:51:31 26 4
gpt4 key购买 nike

我有三个表,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 慢几倍。

最佳答案

我使用以下表格对 MS SQL 2005 进行了测试:A 400K 行、B 26K 行和 C 450 行。

估计的查询计划表明基本内连接比嵌套子查询慢 3 倍,但是在实际运行查询时,基本内连接是嵌套查询的两倍,基本内连接在非常最少的服务器硬件。

您使用的是什么数据库,您看到的时间是什么时候?我在想,如果您看到性能不佳,则可能是索引问题。

关于sql - 在 SQL 中使用 DISTINCT 内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com