代码之家  ›  专栏  ›  技术社区  ›  David542

SELECT语句中的表达式

sql
  •  1
  • David542  · 技术社区  · 4 年前

    SELECT 语句是否允许表达式?后端并不重要,我的意思是更多的概念(iso?)立场。

    例如,在做一些基本的测试(使用mysql8,但我也不关心某个特定的后端)时,它似乎被允许在除 LIMIT OFFSET 地点:

    with tbl (num, str) as (
        select 1, 'a'
    ) 
    SELECT
        (select num from tbl limit 1) select_expr -- select expression
    FROM
        (select * from tbl limit 1) table_expr -- table expression
    WHERE
        (select null from tbl)
        or 1 = (select num from tbl)
        or (select num from tbl) = (select num from tbl) -- filter expressions, can be lhs or rhs or single subselect
    GROUP BY
        num, (select num from tbl) -- aggregate expression
    HAVING
        (select num from tbl limit 1)
    ORDER BY
        (select num from tbl limit 1)
    LIMIT
        (select num from tbl limit 1) -- invalid
    OFFSET
        (select num from tbl limit 1) -- invalid
    
    
    2 回复  |  直到 4 年前
        1
  •  5
  •   Gordon Linoff    4 年前

    一般来说 标量子查询 任何允许常量值的地方都允许-- SELECT , WHERE , HAVING , ORDER BY 例如。

    标量子查询

    是否允许作为 GROUP BY 密钥可能取决于数据库。但话说回来,“常量”值不一定作为 分组依据 钥匙。

    LIMIT 不是标准SQL子句。它的行为完全取决于定义它的数据库。标准SQL中的等价项是 FETCH ;我相信它需要实际的常量,但不同的数据库可能会对其进行不同的处理。

        2
  •  0
  •   Bill Karwin    4 年前

    这个 documentation

    LIMIT子句可用于约束返回的行数 通过SELECT语句。LIMIT接受一个或两个数字参数, 必须都是非负整数常量

    • 在准备好的语句中,可以使用?占位符标记。

    • 在存储程序中,可以使用整数值例程参数或局部变量指定限制参数。