主要问题和问题本身是:在派生表中,我可以有很多嵌套级别吗?
背景:
我知道在 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 嵌套子查询的层数限制为 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):选择的嵌套级别太高
在 maridb 仓库中 https://github.com/MariaDB/server/blob/a812dba6dc881a8a7fbd9bcc1451d2e54c92575c/sql/sql_lex.h#L45
你可以找到字符串 #定义 SELECT_NESTING_MAP_SIZE 64
因此最大嵌套数为 64。 您可以增加此值并重建 mariadb。