MySQL8 递归查询 正确用法

C 2021-8-31 1427

千万不能被CSDN、博客园这类垃圾网站误导,全是互相抄袭的错误代码。

又一次经过半天反复测试,自己找到了正确的用法,之前卡住的程序可以继续写了……

测试表:

CREATE TABLE `city` (
  `t1` int(11) NOT NULL,
  `t2` int(11) NOT NULL,
  `tt` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `city` (`t1`, `t2`, `tt`) VALUES
(1,	2,	3),
(3,	4,	5),
(5,	6,	7),
(7,	8,	9);

查询句:

WITH RECURSIVE temp AS (
SELECT * FROM city WHERE t1=1 AND t2=2
UNION ALL
SELECT city.* FROM city INNER JOIN temp WHERE city.t1=temp.tt AND city.t2=4
UNION ALL
SELECT city.* FROM city INNER JOIN temp WHERE city.t1=temp.tt AND city.t2=6
UNION ALL
SELECT city.* FROM city INNER JOIN temp WHERE city.t1=temp.tt AND city.t2=8
)
SELECT * FROM temp;

易错点:

1. WITH 后面必须添加 RECURSIVE 才能使首次查询结果逐层用于后续查询。

2. 后续查询 SELECT 必须指定缓存表还是原始表,如果直接指定 * 会出现行数不一致错误。

最新回复 (3)
返回
发新帖