Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户定义变量在MySQL 5.7中不起作用,但在v5.6中起作用_Mysql_Variables - Fatal编程技术网

用户定义变量在MySQL 5.7中不起作用,但在v5.6中起作用

用户定义变量在MySQL 5.7中不起作用,但在v5.6中起作用,mysql,variables,Mysql,Variables,我正在尝试使用一个用户定义的变量,它在MySQL 5.6.17中的效果与预期一样,但在MySQL 5.7.10中给出了以下错误 我发现了一个使用的工作示例,但由于相同的错误而失败 我找不到关于这个问题的任何文档,也找不到关于谷歌的更宽泛的术语,我假设这是一个MySQL配置问题。有人能帮我吗,或者给我指出正确的方向 Query: SELECT T2.* FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM pos_port_attachment

我正在尝试使用一个用户定义的变量,它在MySQL 5.6.17中的效果与预期一样,但在MySQL 5.7.10中给出了以下错误

我发现了一个使用的工作示例,但由于相同的错误而失败

我找不到关于这个问题的任何文档,也找不到关于谷歌的更宽泛的术语,我假设这是一个MySQL配置问题。有人能帮我吗,或者给我指出正确的方向

Query: SELECT T2.* FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM pos_port_attachments WHERE id = _id) AS parent_id, @l := @l + ...
Error Code: 1054
Unknown column '_id' in 'where clause'
这就是我正在使用的SQL

SELECT T2.*
FROM (
    SELECT
    @r AS _id,
    (SELECT @r := parent_id FROM mytable WHERE id = _id) AS parent_id,
    @l := @l + 1 AS lvl
    FROM
    (SELECT @r := 100001, @l := 0) vars,
    pos_port_attachments m
    WHERE @r <> 0) T1
JOIN mytable T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC;

我认为您需要将id=\u id的位置更改为

其中id=@r


不知道为什么它在5.6中工作,我不知道为什么人们可以在相关子查询中引用别名。如果您使用未记录的功能,您不能相信它将适用于功能版本。但是,假设ID始终大于PARENT_ID,这个仍然适用于MySQL 5.7.12:

select *
from (
    select t.*,
        case when t.id = @pid 
            then (@pid := t.parent_id) + 1
            else 0
        end as filter
    from some_table t
    cross join (select @pid := 31)init
    order by id desc
) t
where filter > 0
order by id asc;
而这一条也是:

select t.*,
    case when t.id = @pid 
        then (@pid := t.parent_id) + 1
        else 0
    end as filter
from some_table t
cross join (select @pid := 31)init
having filter > 0
order by id desc;

@RyanVincent它说未知列-不是语法错误。但我真的不想知道这是否有帮助。