Firebird 2.5で再帰クエリ WITH RECURSIVE

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をサポートしているようです。

コメント

  1. Pingback: Firebird News » Recursive Queries in Firebird 2.5 : example for WITH RECURSIVE

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください