【问题标题】:unable to use WITH AS in 10.1.34-MariaDB无法在 10.1.34-MariaDB 中使用 WITH AS
【发布时间】:2020-02-01 04:45:53
【问题描述】:

我无法在 MariaDB 中使用 WITH AS。我没有找到说明此版本的 MariaDB 中未使​​用 WITH AS 的文档。以下是我尝试复制的示例查询:

WITH service_audit AS (
    SELECT
      id                    AS service_id
    , revision_from         AS revision_from
    , revision_until        AS revision_until
    FROM audit
    WHERE
    (   revision_from >= '2019-04-01 00:00:00'
        AND revision_from< '2019-09-30 23:59:59'
    )
    ORDER BY
      id, revision_from, revision_until
)
SELECT
    service_id
    revision_from,
    revision_until,
    LAG(service_id, 1) OVER (PARTITION BY service_id ORDER BY service_id, revision_from, revision_until) service_id_lag
FROM
    service_audit;

这是我得到的错误:

您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 靠近'service_audit AS ([42000][1064] 你的 SQL 有错误 句法;检查与您的 MariaDB 服务器相对应的手册 在 'service_audit AS ( SELECT id AS servi' at line 1 查询是: WITH service_audit A ...

您可以使用以下方法复制问题:

WITH
  cte1 AS (SELECT 'a' as a, 'b' as b FROM dual),
  cte2 AS (SELECT 'c' as c, 'd' as d FROM dual)
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;

【问题讨论】:

  • 并非所有版本的 MariaDB 都支持 CTE。你用的是什么版本?
  • 我正在结束这个问题,因为我的 Mariadb 版本不支持和滞后两者。

标签: mysql sql mariadb


【解决方案1】:

这个查询不需要CTE,你可以把它变成一个简单的SELECT

SELECT
    id service_id
    revision_from,
    revision_until,
    LAG(service_id, 1) OVER (
        PARTITION BY service_id ORDER BY service_id, revision_from, revision_until
    ) service_id_lag
FROM audit
WHERE revision_from >= '2019-04-01 00:00:00' AND revision_from< '2019-09-30 23:59:59'
ORDER BY id, revision_from, revision_until

【讨论】:

  • 我试过这个,但它不起作用。我收到以下错误:您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 '(PARTITION BY service_id ORDER BY service_id, revision_from, revision_until) st' 附近使用的正确语法
  • MariaDB 10.1 不支持 LAG。
  • @PuneetSidhu:嗯,好吧,看来这个版本的 MariaDB 也不支持窗口函数(例如LAG())......
【解决方案2】:

公共表表达式 WITH 是在 MariaDB 10.2.1 中引入的。

来自here (从字面上看,我在谷歌上的第一个结果来自搜索“mariadb with”)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 2023-01-12
    • 2011-02-13
    相关资源
    最近更新 更多