

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon QLDB 中的 FROM (INSERT、REMOVE 或 SET) 命令
<a name="ql-reference.from"></a>

**重要**  
支援終止通知：現有客戶將可以使用 Amazon QLDB，直到 07/31/2025 的支援結束為止。如需詳細資訊，請參閱[將 Amazon QLDB Ledger 遷移至 Amazon Aurora PostgreSQL](https://aws.amazon.com/blogs/database/migrate-an-amazon-qldb-ledger-to-amazon-aurora-postgresql/)。

在 Amazon QLDB 中，開頭為 的陳述式`FROM`是 PartiQL 延伸，可讓您在文件中插入和移除特定元素。您也可以使用此陳述式來更新文件中現有的元素，類似於 [UPDATE](ql-reference.update.md)命令。

**注意**  
若要了解如何控制在特定資料表上執行此 PartiQL 命令的存取，請參閱 [Amazon QLDB 中的標準許可模式入門](getting-started-standard-mode.md)。

**Topics**
+ [

## 語法
](#ql-reference.from.syntax)
+ [

## 參數
](#ql-reference.from.parameters)
+ [

## 巢狀集合
](#ql-reference.from.nested-collections)
+ [

## 傳回值
](#ql-reference.from.return)
+ [

## 範例
](#ql-reference.from.examples)
+ [

## 使用驅動程式以程式設計方式執行
](#ql-reference.from.driver)

## 語法
<a name="ql-reference.from.syntax"></a>

**FROM-INSERT**

在現有文件中插入新的元素。若要將新的最上層文件插入資料表，您必須使用 [INSERT](ql-reference.insert.md)。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
INSERT INTO element VALUE data [ AT key_name ]
```

**FROM-REMOVE**

移除文件中的現有元素，或移除整個最上層文件。後者與傳統[DELETE](ql-reference.delete.md)語法在語意上相同。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
REMOVE element
```

**FROM-SET**

更新文件中的一或多個元素。如果元素不存在，則會插入。這在同義詞上與傳統[UPDATE](ql-reference.update.md)語法相同。

```
FROM table_name [ AS table_alias ] [ BY id_alias ]
[ WHERE condition ]
SET element = data [, element = data, ... ]
```

## 參數
<a name="ql-reference.from.parameters"></a>

***table\$1name***  
包含要修改之資料的使用者資料表名稱。DML 陳述式僅支援預設[使用者檢視](working.userdata.md)。每個陳述式只能在單一資料表上執行。  
在此子句中，您也可以包含一或多個巢狀在指定資料表中的集合。如需詳細資訊，請參閱[巢狀集合](#ql-reference.from.nested-collections)。

**AS *table\$1alias***  
（選用） 使用者定義的別名，範圍涵蓋要修改的資料表。用於 `SET`、`REMOVE``INSERT INTO`、 或 `WHERE`子句的所有資料表別名都必須在 `FROM`子句中宣告。`AS` 關鍵字為選用。

**BY *id\$1alias***  
（選用） 使用者定義的別名，可繫結至結果集中每個文件的`id`中繼資料欄位。別名必須使用關鍵字在 `FROM`子句中宣告`BY`。當您想要在查詢預設使用者檢視時篩選[文件 ID](working.metadata.md) 時，此功能非常有用。如需詳細資訊，請參閱[使用 BY 子句查詢文件 ID](working.metadata.by-clause.md)。

**WHERE *condition***  
要修改之文件的選擇條件。  
如果您省略 `WHERE`子句，則會修改資料表中的所有文件。

***元素***  
要建立或修改的文件元素。

***data***  
元素的新值。

**AT *key\$1name***  
在要修改的文件內新增的金鑰名稱。您必須指定對應的 `VALUE`以及金鑰名稱。這是在文件中插入`AT`特定位置的新值所必需。

## 巢狀集合
<a name="ql-reference.from.nested-collections"></a>

雖然您只能在單一資料表上執行 DML 陳述式，但您可以將該資料表中文件中的巢狀集合指定為其他來源。您為巢狀集合宣告的每個別名都可以在 `WHERE`子句和 `SET`、 `INSERT INTO`或 `REMOVE`子句中使用。

例如，下列陳述式的`FROM`來源同時包含`VehicleRegistration`資料表和巢狀`Owners.SecondaryOwners`結構。

```
FROM VehicleRegistration r, @r.Owners.SecondaryOwners o
WHERE r.VIN = '1N4AL11D75C109151' AND o.PersonId = 'abc123'
SET o.PersonId = 'def456'
```

此範例會更新`SecondaryOwners`清單中具有 `PersonId` 之 的特定元素，`VehicleRegistration`該清單`'abc123'`位於文件中具有 `VIN`之 `'1N4AL11D75C109151'`。此表達式可讓您依清單的值而非索引來指定清單的元素。

## 傳回值
<a name="ql-reference.from.return"></a>

`documentId` – 您更新或刪除的每個文件的唯一 ID。

## 範例
<a name="ql-reference.from.examples"></a>

修改文件中的 元素。如果元素不存在，則會插入。

```
FROM Vehicle AS v
WHERE v.VIN = '1N4AL11D75C109151' AND v.Color = 'Silver'
SET v.Color = 'Shiny Gray'
```

修改或插入系統指派的文件`id`中繼資料欄位上的 元素和篩選條件。

```
FROM Vehicle AS v BY v_id
WHERE v_id = 'documentId'
SET v.Color = 'Shiny Gray'
```

修改 文件內`Owners.SecondaryOwners`清單中*第一個*元素`PersonId`的欄位。

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
SET r.Owners.SecondaryOwners[0].PersonId = 'abc123'
```

移除文件中的現有元素。

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p.Address
```

從資料表中移除整個文件。

```
FROM Person AS p
WHERE p.GovId = '111-22-3333'
REMOVE p
```

移除`VehicleRegistration`資料表中文件中`Owners.SecondaryOwners`清單*的第一個*元素。

```
FROM VehicleRegistration AS r
WHERE r.VIN = '1N4AL11D75C109151'
REMOVE r.Owners.SecondaryOwners[0]
```

在`Vehicle`資料表中的文件中插入 `{'Mileage':26500}` 做為最上層的名稱值對。

```
FROM Vehicle AS v 
WHERE v.VIN = '1N4AL11D75C109151'
INSERT INTO v VALUE 26500 AT 'Mileage'
```

在`VehicleRegistration`資料表中的文件`Owners.SecondaryOwners`欄位中附加`{'PersonId':'abc123'}`為名稱/值對。請注意， `Owners.SecondaryOwners` 必須已存在，且必須是清單資料類型，此陳述式才會有效。否則， 子`INSERT INTO`句中`AT`需要關鍵字。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE { 'PersonId' : 'abc123' }
```

插入 `{'PersonId':'abc123'}`做為文件內現有`Owners.SecondaryOwners`清單中*的第一個*元素。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners VALUE {'PersonId' : 'abc123'} AT 0
```

將多個名稱/值對附加到文件中的現有`Owners.SecondaryOwners`清單。

```
FROM VehicleRegistration AS r 
WHERE r.VIN = '1N4AL11D75C109151'
INSERT INTO r.Owners.SecondaryOwners << {'PersonId' : 'abc123'}, {'PersonId' : 'def456'} >>
```

## 使用驅動程式以程式設計方式執行
<a name="ql-reference.from.driver"></a>

若要了解如何使用 QLDB 驅動程式以程式設計方式執行此陳述式，請參閱*驅動程式入門*中的下列教學課程：
+ Java： [快速入門教學課程](driver-quickstart-java.md) \$1 [技術指南參考](driver-cookbook-java.md)
+ .NET： [快速入門教學課程](driver-quickstart-dotnet.md) \$1 [技術指南參考](driver-cookbook-dotnet.md)
+ Go： [快速入門教學課程](driver-quickstart-golang.md) \$1 [技術指南參考](driver-cookbook-golang.md)
+ Node.js： [快速入門教學課程](driver-quickstart-nodejs.md) \$1 [技術指南參考](driver-cookbook-nodejs.md)
+ Python： [快速入門教學課程](driver-quickstart-python.md) \$1 [技術指南參考](driver-cookbook-python.md)