MariaDB vs Mysql 查询问题

MariaDB vs Mysql Query Trouble

最近我们将数据库系统从 MySql 更改为 MariaDB,但我们在一个查询中遇到了一些问题...

SELECT
    (SELECT
        IFNULL(label, '') FROM (
            SELECT
                ( SELECT label FROM llx_categorie WHERE   rowid = @r And type = 0 ) AS label,
                @r As r,
                ( Select  @r := fk_parent FROM llx_categorie WHERE   rowid = r And type = 0 ) As parent,
                @l := @l - 1 As lvl
            FROM( SELECT  @r := 732, @l := 5, @cl := 0 ) vars,
                llx_categorie h
            Where (@l > 0) And type = 0 And @r > 0 And label IS NOT NULL
            ORDER BY parent ASC 
        )  as t1
        LIMIT 0,1 ) as catlevel1,
     (SELECT
        IFNULL(label, '') FROM (
            SELECT
                ( SELECT label FROM llx_categorie WHERE   rowid = @r And type = 0 ) AS label,
                @r As r,
                ( Select  @r := fk_parent FROM llx_categorie WHERE   rowid = r And type = 0 ) As parent,
                @l := @l - 1 As lvl
            FROM( SELECT  @r := 732, @l := 5, @cl := 0 ) vars,
                llx_categorie h
            Where (@l > 0) And type = 0 And @r > 0 And label IS NOT NULL
            ORDER BY parent ASC 
        )  as t1
        LIMIT 1,1 ) as catlevel2

这只是一个从类别 ID @r732 获取父类别的简单查询。

如果我们 运行 按预期在 MySql returns 上执行此操作,例如。

+----------------------+--------------+
| catlevel1            | catlevel2    |
+----------------------+--------------+
| Todas las categorías | Sonido-Audio |
+----------------------+--------------+

但是在 MariaDB 中 returns 这个。

+----------------------+--------------+
| catlevel1            | catlevel2    |
+----------------------+--------------+
| Todas las categorías | NULL         |
+----------------------+--------------+

有谁知道这怎么可能吗?或者可能的解决方案?缺少启用服务器的配置?我快疯了。

提前致谢。

首先,这不是真的:

It's just a simple query

;)

其次,在我对此进行了一些研究之后(这让我感到惊讶),我注意到在查询 mySQL 或 MariaDB 时有很多不同的结果,但其中大多数似乎与 ORDER BYGROUP BY。 Somebod 还精心指出 mariaDB 对 SIGNED 和 UNSIGNED 类型更严格(=更符合 ANSI)。也许这可以帮助您找到正确的方向。

我不知道这个问题的解决方法。

我认为问题源于这样的事情:

给定一个带有 ORDER BY 的子查询和一个没有 ORDER BY 的外部查询...

在旧 MySQL 中,内部顺序在外部``SELECT` 中仍然有效。

在 MariaDB 中,未指定的外序是不可预测的table。

可能的解决方案:将 ORDER BY parent ASC 移出一层。

另一种可能的解决方案(针对 MariaDB):设置 optimizer_switch='derived_merge=off'(或 optimizer_switch='derived_merge=off,derived_with_keys=off',具体取决于您的 table ). Reference.

我怀疑您得到 'correct' catlevel1 而不是 catlevel2 只是巧合。

此外,如果您不使用它,请删除 llx_categorie h