服务器版本:5.7.22-22-log源分发
-- table:
CREATE TABLE `uc_resources` (
`resources_id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`resources_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- data:
insert into uc_resources values
(2,0),
(13,2),
(14,2),
(15,2),
(6,0),
(23,6);
-- sql:
SELECT
T2.resources_id as resources_id
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM uc_resources WHERE resources_id = _id) AS supr_catl_id
FROM
(SELECT @r := 13, @l := 0) vars,
uc_resources h
WHERE @r != 0
) T1
JOIN uc_resources T2
ON T1._id = T2.resources_id
UNION
SELECT
T2.resources_id as resources_id
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM uc_resources WHERE resources_id = _id) AS supr_catl_id
FROM
(SELECT @r := 14, @l := 0) vars,
uc_resources h
WHERE @r != 0
) T1
JOIN uc_resources T2
ON T1._id = T2.resources_id;
此sql的结果集仅包含服务器中第二个“ select”的结果。
如果第二选择中的r
重命名为另一个名称,例如r1
,则sql可以正常工作。但是为什么呢?