Firebird 2.5によるWITH RECURSIVEの例。
■サンプルデータの作成
CREATE TABLE address (
id INTEGER,
parent INTEGER,
name VARCHAR(20)
);
INSERT INTO address VALUES(1, NULL, '日本');
INSERT INTO address VALUES(2, 1, '東京都');
INSERT INTO address VALUES(3, 2, '江戸川区');
INSERT INTO address VALUES(4, 1, '大阪府');
INSERT INTO address VALUES(5, 4, '大阪市');
INSERT INTO address VALUES(6, 5, '中央区');
INSERT INTO address VALUES(7, 5, '天王寺区');
INSERT INTO address VALUES(8, 4, '堺市');
■SQL
大阪府とその配下の区市町村を取得するSQL
WITH RECURSIVE n as (
SELECT * FROM address WHERE id=4
UNION ALL
SELECT address.* FROM address, n WHERE address.parent = n.id
)
SELECT * FROM n;
ID | PARENT | NAME |
---|---|---|
4 | 1 | 大阪府 |
5 | 4 | 大阪市 |
6 | 5 | 中央区 |
7 | 5 | 天王寺区 |
8 | 4 | 堺市 |
主要なRDBMSはWITH RECURSIVEをサポートしているようです。
Pingback: Firebird News » Recursive Queries in Firebird 2.5 : example for WITH RECURSIVE