再帰クエリを実装するSQL標準の方法。 IBMDB2およびSQLServerによると、 WITH 句。 CONNECT BY を翻訳する一例については、この記事を参照してください。 WITHに (技術的には再帰CTE )-この例はDB2用ですが、SQLServerでも機能すると思います。
編集:どうやら元の質問者は特定の例を必要とします、これは私がすでに与えたURLを持つIBMサイトからのものです。与えられたテーブル:
CREATE TABLE emp(empid INTEGER NOT NULL PRIMARY KEY,
name VARCHAR(10),
salary DECIMAL(9, 2),
mgrid INTEGER);
ここで、 mgrid 従業員のマネージャーのempidを参照します 、タスクは、 Joanに直接または間接的に報告するすべての人の名前を取得することです 。 Oracleでは、これは単純な<code> CONNECT :
SELECT name
FROM emp
START WITH name = 'Joan'
CONNECT BY PRIOR empid = mgrid
SQL Server、IBM DB2、またはPostgreSQL 8.4(およびSQL標準では、その価値があります;-)では、完全に同等のソリューションは、代わりに再帰クエリです(より複雑な構文ですが、実際には、さらに強力で柔軟性があります)。 ):
WITH n(empid, name) AS
(SELECT empid, name
FROM emp
WHERE name = 'Joan'
UNION ALL
SELECT nplus1.empid, nplus1.name
FROM emp as nplus1, n
WHERE n.empid = nplus1.mgrid)
SELECT name FROM n
OracleのSTARTWITH 句は最初のネストされたSELECTになります 、再帰の基本ケース、 UNION 別のSELECTである再帰部分で編集 。
SQLServer固有のWITHのフレーバー もちろん、MSDNに文書化されており、このキーワードを使用するためのガイドラインと制限、およびいくつかの例も示されています。