相关查询 - 在派生表中,我可以有很多嵌套级别吗?

问题描述 投票:0回答:2

主要问题和问题本身是:在派生表中,我可以有很多嵌套级别吗?

背景:

我知道在 MySQL 中你不能有两层深度的相关子查询,但是,使用派生表似乎可以,这是正常的还是有什么我不知道的,或者 这 2 级事物是否仅且严格影响相关子查询

SELECT table3.field1, table3.field2, (SELECT table1.field1 FROM table1 WHERE table1.a = table3.field2) AS calculated,
        (SELECT COUNT(*) FROM (SELECT * FROM table2 WHERE table2.c = table3.field2) AS derived) AS calculated2
FROM table3;
mysql sql subquery correlated-subquery derived-table
2个回答
0
投票

MySQL 嵌套子查询的层数限制为 63,与连接的表数量相同。

https://github.com/mysql/mysql-server/blob/8.0/sql/sql_lex.cc#L85

static constexpr const int MAX_SELECT_NESTING{sizeof(nesting_map) * 8 - 1};

nesting_map
是定义为
uint64_t
的 64 位整数类型。因此
sizeof(nesting_map)
是 8 个字节,
MAX_SELECT_NESTING
的结果是 64-1。

如果您确实超出了嵌套子查询的级别数,则会收到此错误:

错误 1473 (HY000):选择的嵌套级别太高


0
投票

在 maridb 仓库中 https://github.com/MariaDB/server/blob/a812dba6dc881a8a7fbd9bcc1451d2e54c92575c/sql/sql_lex.h#L45

你可以找到字符串 #定义 SELECT_NESTING_MAP_SIZE 64

因此最大嵌套数为 64。 您可以增加此值并重建 mariadb。

© www.soinside.com 2019 - 2024. All rights reserved.