# 条件に基づいて2つの配列をマージ

UNION ALLキーワードを条件付きで使用して2つの配列を1つに結合し、その内容を反復処理します。

## このタスクについて

この例では、以下のJSON入力を使います。ここには、PlatinumとGoldという2つの配列を持つcustomersエレメントが含まれています。配列にはそれぞれ、3つの同じエレメント(region、cid、name)が含まれています。目標は1つの配列を作成することです。

```
{
	"customers": {
		"Platinum": [
			{
				"region": "West Midlands",
				"cid": 12,
				"name": "E. W. Gilbert"
			},
			{
				"region": "Greater Manchester",
				"cid": 75,
				"name": "John Doe"
			}
		],
		"Gold": [
			{
				"region": "West Midlands",
				"cid": 13,
				"name": "G. K. Peatling"
			},
			{
				"region": "Greater Manchester",
				"cid": 76,
				"name": "Tom Cruise"
			}
		]
	}
}
```

## 手順

1. FROM句とSELECT句を作成して、新しいcustomers配列を作成します。
   ```
   FROM customers
   SELECT {
      customers =
         []
   }
   ```
2. この新しい配列で、入力Platinum配列を反復処理する最初のサブクエリーを作成します。

   IFキーワードを伴う条件式を使えば、Platinum配列に値があるかどうかをチェックできます。
   ```
   FROM customers
   SELECT {
      customers =
         [
            IF (hasValue(Platinum)) (
               FROM Platinum
               SELECT {
                  region = region,
                  cid = cid,
                  name = name,
                  ranking = "Platinum"
               }
            )
         ]
   }
   ```
3. Gold配列を反復処理する2番目のサブクエリーを作成し、UNION ALLキーワードを使って両方の配列を新しいcustomers配列に結合させます。

   UNION ALLキーワードの後に、Gold配列に値があるかどうかをチェックする条件式を含めることもできます。
   ```
   FROM customers
   SELECT {
      customers =
         [
            IF (hasValue(Platinum)) (
               FROM Platinum
               SELECT {
                  region = region,
                  cid = cid,
                  name = name,
                  ranking = "Platinum"
               }
            )
            UNION ALL
            IF (hasValue(Gold)) (
               FROM Gold
               SELECT {
                  region = region,
                  cid = cid,
                  name = name,
                  ranking = "Gold"
               }
            )
         ]
   }
   ```

## タスクの結果

このクエリーは次の結果を返します:

```
[
	{
		"customers": [
			{
				"region": "West Midlands",
				"cid": 12,
				"name": "E. W. Gilbert",
				"ranking": "Platinum"
			},
			{
				"region": "Greater Manchester",
				"cid": 75,
				"name": "John Doe",
				"ranking": "Platinum"
			},
			{
				"region": "West Midlands",
				"cid": 13,
				"name": "G. K. Peatling",
				"ranking": "Gold"
			},
			{
				"region": "Greater Manchester",
				"cid": 76,
				"name": "Tom Cruise",
				"ranking": "Gold"
			}
		]
	}
]
```