DBZ-4780 Introduce support of LATERAL operator
This commit is contained in:
parent
5ab416c86d
commit
5bbc32c896
@ -131,6 +131,7 @@ JOIN: 'JOIN';
|
|||||||
KEY: 'KEY';
|
KEY: 'KEY';
|
||||||
KEYS: 'KEYS';
|
KEYS: 'KEYS';
|
||||||
KILL: 'KILL';
|
KILL: 'KILL';
|
||||||
|
LATERAL: 'LATERAL';
|
||||||
LEADING: 'LEADING';
|
LEADING: 'LEADING';
|
||||||
LEAVE: 'LEAVE';
|
LEAVE: 'LEAVE';
|
||||||
LEFT: 'LEFT';
|
LEFT: 'LEFT';
|
||||||
|
@ -881,6 +881,7 @@ selectStatement
|
|||||||
queryExpression
|
queryExpression
|
||||||
)?
|
)?
|
||||||
orderByClause? limitClause? lockClause? #unionParenthesisSelect
|
orderByClause? limitClause? lockClause? #unionParenthesisSelect
|
||||||
|
| querySpecificationNointo (',' lateralStatement)+ #withLateralStatement
|
||||||
;
|
;
|
||||||
|
|
||||||
updateStatement
|
updateStatement
|
||||||
@ -1006,13 +1007,13 @@ indexHintType
|
|||||||
;
|
;
|
||||||
|
|
||||||
joinPart
|
joinPart
|
||||||
: (INNER | CROSS)? JOIN tableSourceItem
|
: (INNER | CROSS)? JOIN LATERAL? tableSourceItem
|
||||||
(
|
(
|
||||||
ON expression
|
ON expression
|
||||||
| USING '(' uidList ')'
|
| USING '(' uidList ')'
|
||||||
)? #innerJoin
|
)? #innerJoin
|
||||||
| STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin
|
| STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin
|
||||||
| (LEFT | RIGHT) OUTER? JOIN tableSourceItem
|
| (LEFT | RIGHT) OUTER? JOIN LATERAL? tableSourceItem
|
||||||
(
|
(
|
||||||
ON expression
|
ON expression
|
||||||
| USING '(' uidList ')'
|
| USING '(' uidList ')'
|
||||||
@ -1053,6 +1054,11 @@ unionStatement
|
|||||||
(querySpecificationNointo | queryExpressionNointo)
|
(querySpecificationNointo | queryExpressionNointo)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
lateralStatement
|
||||||
|
: LATERAL (querySpecificationNointo | queryExpressionNointo)
|
||||||
|
| LATERAL '(' (querySpecificationNointo | queryExpressionNointo) ')' (AS? uid)?
|
||||||
|
;
|
||||||
|
|
||||||
// details
|
// details
|
||||||
|
|
||||||
selectSpec
|
selectSpec
|
||||||
|
@ -475,3 +475,10 @@ WITH RECURSIVE cte (n) AS
|
|||||||
)
|
)
|
||||||
SELECT * FROM cte;
|
SELECT * FROM cte;
|
||||||
#end
|
#end
|
||||||
|
|
||||||
|
#begin
|
||||||
|
CREATE VIEW `invoice_payments_stats` AS
|
||||||
|
SELECT
|
||||||
|
`i`.`id` AS `id`
|
||||||
|
FROM (`invoices` `i` JOIN lateral (SELECT MAX(`ip`.`date`) AS `latest_payment` FROM `invoice_payments` `ip`) `ps`);
|
||||||
|
#end
|
||||||
|
@ -194,4 +194,20 @@ SELECT
|
|||||||
GROUP_CONCAT(bin_volume order by id) AS `rank`
|
GROUP_CONCAT(bin_volume order by id) AS `rank`
|
||||||
FROM table2
|
FROM table2
|
||||||
WINDOW w AS (PARTITION BY id, bin_volume ORDER BY id ROWS UNBOUNDED PRECEDING),
|
WINDOW w AS (PARTITION BY id, bin_volume ORDER BY id ROWS UNBOUNDED PRECEDING),
|
||||||
w2 AS (PARTITION BY id, bin_volume ORDER BY id DESC ROWS 10 PRECEDING);
|
w2 AS (PARTITION BY id, bin_volume ORDER BY id DESC ROWS 10 PRECEDING);
|
||||||
|
|
||||||
|
#begin
|
||||||
|
-- https://dev.mysql.com/doc/refman/8.0/en/lateral-derived-tables.html
|
||||||
|
SELECT
|
||||||
|
salesperson.name,
|
||||||
|
max_sale.amount,
|
||||||
|
max_sale.customer_name
|
||||||
|
FROM
|
||||||
|
salesperson,
|
||||||
|
LATERAL
|
||||||
|
(SELECT amount, customer_name
|
||||||
|
FROM all_sales
|
||||||
|
WHERE all_sales.salesperson_id = salesperson.id
|
||||||
|
ORDER BY amount DESC LIMIT 1)
|
||||||
|
AS max_sale;
|
||||||
|
#end
|
||||||
|
Loading…
Reference in New Issue
Block a user