

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# CONNECT BY 句
<a name="r_CONNECT_BY_clause"></a>

CONNECT BY 句は、階層内の行間の関係を指定します。CONNECT BY を使用すると、テーブルをそれ自体に結合して階層データを処理することで、階層順に行を選択できます。例えば、組織図を再帰的にループ処理してデータを一覧表示できます。

階層型クエリは次の順序で処理されます。

1. FROM 句に結合がある場合は、最初に処理されます。

1. CONNECT BY 句が評価されます。

1. WHERE 句が評価されます。

## 構文
<a name="r_CONNECT_BY_clause-synopsis"></a>

```
[START WITH start_with_conditions]
CONNECT BY connect_by_conditions
```

**注記**  
START と CONNECT は予約語ではありませんが、ランタイムの失敗を避けるために、クエリでテーブルのエイリアスとして START と CONNECT を使用する場合は、区切られた識別子 (二重引用符) または AS を使用してください。

```
SELECT COUNT(*)
FROM Employee "start"
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

```
SELECT COUNT(*)
FROM Employee AS start
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

## パラメータ
<a name="r_CONNECT_BY_parameters"></a>

 *start\_with\_conditions*   
階層のルート行を指定する条件

 *connect\_by\_conditions*   
階層の親行と子行の関係を指定する条件。少なくとも 1 つの条件は、親行を参照する ` ` 単項演算子で修飾される必要があります。  

```
PRIOR column = expression
-- or
expression > PRIOR column
```

## オペレータ
<a name="r_CONNECT_BY_operators"></a>

CONNECT BY クエリでは、次の演算子を使用できます。

 *LEVEL*   
階層内の現在の行レベルを返す疑似列。ルート行には 1、ルート行の子には 2、というように返します。

 *PRIOR*   
階層内の現在の行の親行の式を評価する単項演算子。

## 例
<a name="r_CONNECT_BY_example"></a>

次の例は、John に直接的に、または間接的に報告する従業員の数を返す CONNECT BY クエリで、深さは 4 レベル未満です。

```
SELECT id, name, manager_id
FROM employee
WHERE LEVEL < 4
START WITH name = 'John'
CONNECT BY PRIOR id = manager_id;
```

以下は、クエリの結果です。

```
id      name      manager_id
------+----------+--------------
  101     John        100
  102     Jorge       101
  103     Kwaku       101
  110     Liu         101
  201     Sofía       102
  106     Mateo       102
  110     Nikki       103
  104     Paulo       103
  105     Richard     103
  120     Saanvi      104
  200     Shirley     104
  205     Zhang       104
```

 例えば、テーブルは次のように定義されています。

```
CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
   );
```

 以下は、テーブルに挿入された行です。

```
INSERT INTO employee(id, name, manager_id)  VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
```

以下は、John が所属する部門の組織図です。

![John が所属する部門の組織図。](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/images/org-chart.png)
