gpt4 book ai didi

SQL 连接格式 - 嵌套内连接

转载 作者:行者123 更新时间:2023-12-02 00:43:55 25 4
gpt4 key购买 nike

我正在重构的遗留系统中有以下 SQL 语句。这是出于本问题目的的缩写 View ,暂时仅返回 count(*)。

SELECT COUNT(*)
FROM Table1
INNER JOIN Table2
INNER JOIN Table3 ON Table2.Key = Table3.Key AND Table2.Key2 = Table3.Key2
ON Table1.DifferentKey = Table3.DifferentKey

它正在生成大量记录并杀死系统,但有人可以解释一下语法吗?这可以用其他方式表达吗?

  • 表 1 包含 419 行
  • 表2包含3374行
  • 表3包含28182行

编辑:

建议重新格式化

SELECT COUNT(*)
FROM Table1
INNER JOIN Table3
ON Table1.DifferentKey = Table3.DifferentKey
INNER JOIN Table2
ON Table2.Key = Table3.Key AND Table2.Key2 = Table3.Key2

最佳答案

为了提高可读性,我重新构建了查询...从表 1 的最顶层开始,然后将其与表 3 联系起来,然后将表 3 与表 2 联系起来。如果您遵循关系链,那么更容易遵循。

现在回答你的问题。由于笛卡尔积,您将获得大量计数。对于 Table1 中与 Table3 中匹配的每条记录,您将得到 X * Y。然后,对于 table3 和 Table2 之间的每个匹配都会产生相同的影响... Y * Z... 因此,表 1 中只有一个可能的 ID 的结果可以有 X * Y * Z 记录。

这是基于不知道表的规范化或内容如何......如果键是主键的话......

Ex:
Table 1
DiffKey Other Val
1 X
1 Y
1 Z

Table 3
DiffKey Key Key2 Tbl3 Other
1 2 6 V
1 2 6 X
1 2 6 Y
1 2 6 Z

Table 2
Key Key2 Other Val
2 6 a
2 6 b
2 6 c
2 6 d
2 6 e

因此,表 1 连接到表 3 将产生(在这种情况下)12 条记录(每个 in 1 与每个 in 3 连接)。然后,再次对表 2 中的每个匹配记录(5 条记录)进行计算...总共将返回 60 ( 3 tbl1 * 4 tbl3 * 5 tbl2 ) 个计数。

所以,现在,根据您的 1000 条记录进行扩展,您就会看到一个困惑的结构如何窒息一头牛(可以这么说)并扼杀性能。

SELECT
COUNT(*)
FROM
Table1
INNER JOIN Table3
ON Table1.DifferentKey = Table3.DifferentKey
INNER JOIN Table2
ON Table3.Key =Table2.Key
AND Table3.Key2 = Table2.Key2

关于SQL 连接格式 - 嵌套内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5099420/

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