gpt4 book ai didi

mysql - SQL LEFT JOIN分配?

转载 作者:行者123 更新时间:2023-11-29 06:16:33 26 4
gpt4 key购买 nike

分布式,在数学意义上是以下属性:

f(a + b) = f(a) + f(b)

现在我有了这个 SQL 脚本,它通常看起来像这样:

SELECT ... FROM ... LEFT JOIN (
Subquery_A
UNION ALL
Subquery_B
UNION ALL
...
UNION ALL Subquery_Z
)

查询是否数学分布

也就是我能不能把它分解成

SELECT ... FROM ... LEFT JOIN (Subquery_A)
UNION ALL
SELECT ... FROM ... LEFT JOIN (Subquery_B)
UNION ALL
...
UNION ALL
SELECT ... FROM ... LEFT JOIN (Subquery_Z)

我问这个问题的原因是我有一个巨大的查询(13'000 多行),它经常超过公司数据库的最大连接生命周期。但是,将查询减少到仅 1 个子查询是有效的,并且在最大连接生命周期内很好。

因此,我想到了将这个庞大的查询拆分为许多单独的查询,并在客户端执行 UNION ALL。 (因为 UNION ALL 是在简单连接子查询的结果之后)

你觉得这行得通吗?

最佳答案

不,这并不完全相同,因为每个子查询都会从左侧的表中获得完整的记录列表。您必须在任何子查询中消除与左侧表中的记录不匹配的多条记录。

假设您在表 1(左侧表)中有以下值:

ID
--
1
2
3
4
5

假设您有以下由 2 个子查询返回的值

Subquer1ID
--------
1
2

Subquer2ID
--------
1
3
4

使用第一个版本的sql你会得到

ID  SubquerID   FromSubquery
-- ---------- ----------
1 1 Subquer1
1 1 Subquer2
2 2 Subquer1
3 3 Subquer2
4 4 Subquer2
5 Null Null

对于第二个版本,结果集将是

ID  SubquerID   FromSubquery
-- ---------- ----------
1 1 Subquer1
2 2 Subquer1
3 Null Null
4 Null Null
5 Null Null
1 1 Subquer2
2 Null Null
3 3 Subquer2
4 4 Subquer2
5 Null Null
  1. 您必须删除重复的 ID - Null - Null
  2. 如果结果中有一行包含 ID - Non-null - Non-nullSame Id - Null - Null 行,那么后面的行必须也被删除。

如果有一系列 SELECT ... FROM ... INNER JOIN (Subquery_A) 查询,然后是单个 SELECT ... FROM left_hand_side_table 语句,并将最后一个查询的结果与一系列内连接的结果相结合,以便将不在内连接中的任何记录放入最终结果集中。

关于mysql - SQL LEFT JOIN分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597707/

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