我正在尝试使用User-Defined变量,它在MySQL 5.6.17中按预期工作,但在MySQL 5.7.10中给出了以下错误。
我找到了一个this question的工作示例,它失败并出现同样的错误。
我找不到任何文档或提及问题(相当宽泛的术语),并假设它是一个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;
答案 0 :(得分:1)
我认为您需要将WHERE id = _id更改为
WHERE id = @ r
不确定为什么它适用于5.6
答案 1 :(得分:0)
我不知道为什么人们可以引用相关子查询中的别名。如果您使用未记录的“功能”,则不能依赖它将适用于功能版本。但是 - 假设ID
总是大于PARENT_ID
,那么这个仍然适用于{5.7}的http://rextester.com:
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;