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 BY
和 GROUP 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
。
最近我们将数据库系统从 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 BY
和 GROUP 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
。