Подзапросы в предложении FROM
Хотя подзапросы чаще размещаются в предложении WHERE, они также могут быть частью предложения FROM. Такие подзапросы обычно называются производными таблицами.
Если подзапрос используется таким образом, необходимо также использовать предложение AS для именования результата подзапроса.
Режим ORACLE
Начиная с MariaDB 10.6.0, безымянные подзапросы в предложении FROM (без предложения AS) разрешены в режиме ORACLE.
Примеры
CREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);
INSERT INTO student VALUES
('Chun', 'SQL', 75), ('Chun', 'Tuning', 73),
('Esben', 'SQL', 43), ('Esben', 'Tuning', 31),
('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88),
('Tatiana', 'SQL', 87), ('Tatiana', 'Tuning', 83);
Предположим, что, учитывая приведенные данные, вы хотите вернуть среднее значение общего балла для всех студентов. Другими словами, среднее значение баллов Чуна 148 (75+73), Эсбена 74 (43+31) и т.д.
Вы не можете сделать следующее:
SELECT AVG(SUM(score)) FROM student GROUP BY name; ERROR 1111 (HY000): Invalid use of group function
Однако подзапрос в предложении FROM разрешен:
SELECT AVG(sq_sum) FROM (SELECT SUM(score) AS sq_sum FROM student GROUP BY name) AS t; +-------------+ | AVG(sq_sum) | +-------------+ | 134.0000 | +-------------+
Начиная с MariaDB 10.6 в режиме ORACLE, следующее разрешено:
SELECT * FROM (SELECT 1 FROM DUAL), (SELECT 2 FROM DUAL);
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/subqueries-in-a-from-clause/