SQL: add sub-selects to the Limitations page (#37012)

This commit is contained in:
Andrei Stefan 2019-01-07 10:08:51 +02:00 committed by GitHub
parent e778abaac5
commit 39a072389c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 0 deletions

View File

@ -69,3 +69,24 @@ a field is an array (has multiple values) or not, so without reading all the dat
When doing aggregations (`GROUP BY`) {es-sql} relies on {es}'s `composite` aggregation for its support for paginating results.
But this type of aggregation does come with a limitation: sorting can only be applied on the key used for the aggregation's buckets. This
means that queries like `SELECT * FROM test GROUP BY age ORDER BY COUNT(*)` are not possible.
[float]
=== Using a sub-select
Using sub-selects (`SELECT X FROM (SELECT Y)`) is **supported to a small degree**: any sub-select that can be "flattened" into a single
`SELECT` is possible with {es-sql}. For example:
["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[limitationSubSelect]
--------------------------------------------------
The query above is possible because it is equivalent with:
["source","sql",subs="attributes,macros"]
--------------------------------------------------
include-tagged::{sql-specs}/docs.csv-spec[limitationSubSelectRewritten]
--------------------------------------------------
But, if the sub-select would include a `GROUP BY` or `HAVING` or the enclosing `SELECT` would be more complex than `SELECT X
FROM (SELECT ...) WHERE [simple_condition]`, this is currently **un-supported**.

View File

@ -2130,3 +2130,30 @@ SELECT NOW() AS result;
2018-12-12T14:48:52.448Z
// end::nowFunction
;
////////////
// Next two queries need to have the same output, as they should be equivalent.
// They are used in the "SQL Limitations" page.
////////////
limitationSubSelect
// tag::limitationSubSelect
SELECT * FROM (SELECT first_name, last_name FROM emp WHERE last_name NOT LIKE '%a%') WHERE first_name LIKE 'A%';
first_name | last_name
---------------+---------------
Anneke |Preusig
Anoosh |Peyn
Arumugam |Ossenbruggen
// end::limitationSubSelect
;
limitationSubSelect
// tag::limitationSubSelectRewritten
SELECT first_name, last_name FROM emp WHERE last_name NOT LIKE '%a%' AND first_name LIKE 'A%';
// end::limitationSubSelectRewritten
first_name | last_name
---------------+---------------
Anneke |Preusig
Anoosh |Peyn
Arumugam |Ossenbruggen
;