Recursive Queries in Teradata
Recursive queries are used when a parent child relationship exists within the table and you may want to cycle through all the way up to the parent
In Teradata, You can specify a recursive query by:
- Preceding a query with the WITH RECURSIVE clause
- Creating a view using the RECURSIVE clause in a CREATE VIEW statement
Table Recursive Syntax:
WITH RECURSIVE temp_table (employee_number) AS
( SELECT root.employee_number
FROM employee root
WHERE root.manager_employee_number = 801
UNION ALL
SELECT indirect.employee_number
FROM temp_table direct, employee indirect
WHERE direct.employee_number = indirect.manager_employee_number
)
SELECT * FROM temp_table ORDER BY employee_number;
Recursive view syntax:
CREATE RECURSIVE VIEW hierarchy_801 (employee_number) AS
( SELECT root.employee_number
FROM employee root
WHERE root.manager_employee_number = 801
UNION ALL
SELECT indirect.employee_number
FROM hierarchy_801 direct, employee indirect
WHERE direct.employee_number = indirect.manager_employee_number
);
Recursive queries with depth control:
To avoid infinite looping, we can specify a optional depth parameter
WITH RECURSIVE temp_table (employee_number, depth) AS
( SELECT root.employee_number, 0 AS depth
FROM employee root
WHERE root.manager_employee_number = 801
UNION ALL
SELECT indirect.employee_number, direct.depth+1 AS newdepth
FROM temp_table direct, employee indirect
WHERE direct.employee_number = indirect.manager_employee_number
AND newdepth <= 5
)
SELECT * FROM temp_table ORDER BY employee_number;
nVector
posted on 12 May 18Enjoy great content like this and a lot more !
Signup for a free account to write a post / comment / upvote posts. Its simple and takes less than 5 seconds
Post Comment