MySQL層級數據查詢
address表結構如下:
address表有如下數據:
現在創建一個函數,獲取地址全稱:
CREATE DEFINER=`root`@`localhost` FUNCTION `getFullName`(`id` varchar(1000)) RETURNS varchar(1000) CHARSET utf8mb4
READS SQL DATA
BEGIN
DECLARE fullName VARCHAR(1000);
DECLARE parentId VARCHAR(1000);
DECLARE parentName VARCHAR(1000);
set fullName = (SELECT address.`name` FROM address WHERE address.id = id);
set parentId = (SELECT address.parentId FROM address WHERE address.id = id);
WHILE parentId IS NOT NULL DO
set parentName = (SELECT address.`name` FROM address WHERE address.id = parentId);
set fullName = CONCAT(parentName,"/",fullName);
set parentId = (SELECT address.parentId FROM address WHERE address.id = parentId);
END WHILE;
RETURN fullName;
END
函數測試:
SELECT
`address`.`id` AS `id`,
`address`.`name` AS `name`,
`getFullName` ( `address`.`id` ) AS `fullName`
FROM
`address`