无法在10.1.34-MariaDB中与WITH一起使用

问题描述 投票:2回答:3

我无法在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;

这是我得到的错误:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'service_audit AS ( [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'service_audit AS ( SELECT id AS servi' at line 1 Query is: 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;
mysql sql mariadb with-statement
3个回答
0
投票

公用表表达式WITHintroduced in MariaDB 10.2.1。您正在使用MariaDB 10.1,因此该功能不可用。


0
投票

公用表表达式WITH在MariaDB 10.2.1中引入。

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


0
投票

对于此查询,您只需将CTE转换为派生表:

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 (
    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'
    )
) x
ORDER BY id, revision_from, revision_until
© www.soinside.com 2019 - 2024. All rights reserved.