文档中心MogDBMogDB StackUqbar

文档:v2.0

支持的版本:

其他版本:

LATERAL关键字

LATERAL 关键字用于在查询中引用先前表达式的结果。它可以与子查询或函数一起使用,并允许在查询中使用先前的表达式结果作为后续表达式的输入。

LATERAL关键字的作用:

  • 依赖关联子查询:使用LATERAL关键字,可以在查询中引用先前的表达式,从而创建依赖关联的子查询。即可以在子查询中访问先前的表达式的结果,并在查询中使用该结果作为后续表达式的输入。
  • 动态列计算:LATERAL关键字可以用于动态计算列的值。例如,在查询中使用LATERAL来计算每行的列值,这些列的计算依赖于先前的表达式结果或其他表中的数据。
  • 减少查询次数:通过使用LATERAL关键字可以避免多次执行重复的子查询。子查询可以引用外部查询的表达式结果,从而在查询执行过程中减少查询次数,提高性能。
Uqbar=# CREATE TABLE t_product AS
    SELECT   id AS product_id,
             id * 10 * random() AS price,
             'product ' || id AS product
    FROM generate_series(1, 1000) AS id;
 
Uqbar=# CREATE TABLE t_wishlist
(
    wishlist_id        int,
    username           text,
    desired_price      numeric
);
 
Uqbar=# INSERT INTO t_wishlist VALUES
    (1, 'hans', '450'),
    (2, 'joe', '60'),
    (3, 'jane', '1500');

Uqbar=# SELECT        *
FROM      t_wishlist AS w,
    LATERAL  (SELECT      *
        FROM       t_product AS p
        WHERE       p.price < w.desired_price
        ORDER BY p.price DESC
        LIMIT 3
       ) AS x
ORDER BY wishlist_id, price DESC;Uqbar-# Uqbar-# Uqbar(# Uqbar(# Uqbar(# Uqbar(# Uqbar(# Uqbar-#
 wishlist_id | username | desired_price | product_id |      price       |   product
-------------+----------+---------------+------------+------------------+-------------
           1 | hans     |           450 |        268 | 447.912638001144 | product 268
           1 | hans     |           450 |        445 |  440.73279609438 | product 445
           1 | hans     |           450 |         90 | 436.825405899435 | product 90
           2 | joe      |            60 |        122 | 57.7194433659315 | product 122
           2 | joe      |            60 |         50 | 55.5128382984549 | product 50
           2 | joe      |            60 |          9 | 55.1704007294029 | product 9
           3 | jane     |          1500 |        168 | 1498.51569615304 | product 168
           3 | jane     |          1500 |        774 | 1496.66411731392 | product 774
           3 | jane     |          1500 |        420 | 1494.14442060515 | product 420
(9 rows)
Copyright © 2011-2024 www.enmotech.com All rights reserved.