# Exists - スクリプト関数

Exists() は、特定の項目値がロード スクリプトの項目にすでにロードされているかどうかを決定します。この関数は TRUE または FALSE を返すため、LOAD ステートメントまたは IF 関数の where 句で使用できます。

情報メモNot Exists() を使用して項目値がロードされていないかどうかを確認することもできますが、where 句で Not Exists() を使用する場合は注意が必要です。Exists() 関数は、以前にロードされたテーブルと現在のテーブルで以前にロードされた値の両方をテストします。したがって、最初の出現のみがロードされます。2 番目の出現が検出されると、値はすでにロードされています。詳細については、例を参照してください。

構文:

Exists(field\_name [, expr] )

**戻り値データ型：** ブール値

引数：

Exists 引数

| 引数 | 説明 |
| --- | --- |
| field\_name | 値を検索する項目の名前。引用符なしで明示的な項目名を使用できます。<br><br>項目はスクリプトによって既にロードされている必要があります。つまり、スクリプトのさらに下の句にロードされている項目を参照することはできません。 |
| expr | 存在するかどうかを確認する値。現在の [load] ステートメントの 1 つまたは複数の項目を参照する明示的な値または数式を使用できます。<br><br>情報メモ現在の [load] ステートメントに含まれていない項目は参照できません。<br><br>この引数はオプションです。省略すると、関数は現在のレコードの field\_name の値が既に存在するかどうかを確認します。 |

例1：

`Exists 
 (Employee)`

現在のレコード内の項目 Employee の値が、その項目を含む読み取り済みのレコード内にすでに存在してれば、-1 (True) を返します。

例2：

`Exists(Employee, 
 'Bill')`

項目値 'Bill' が項目 Employee の現在のコンテンツに含まれていれば、-1 (True) を返します。

ステートメント `Exists (Employee, Employee)` と `Exists (Employee)` は同じ働きをします。

例3：

```
Employees:
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where Exists (Employee);

Drop Tables Employees;
```

この例では、データ モデルの Citizens と呼ばれるテーブルがロードされ、このテーブルは Employee 軸と Address 軸を使用してテーブル チャートとして表示できます。

where 節：`where Exists (Employee)` は、テーブル Citizens から Employees にも存在する名前のみを新しいテーブルにロードすることを意味します。Drop ステートメントは、一時的なテーブル Employees を混乱を避けるために削除します。

例 3 の結果

| Employee | Address |
| --- | --- |
| Bill | New York |
| John | Miami |
| Steve | Chicago |

例4：

```
Employees:
Load * inline [ 
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Employee);
 
Drop Tables Employees;
```

where 句には次のものが含まれます not: `where not Exists (Employee)`。

これは、テーブル Citizens から Employees にも存在する名前のみを新しいテーブルにロードすることを意味します。

Citizens テーブルには Lucy の値が 2 つありますが、結果テーブルには 1 つしか含まれていないことに注意してください。最初の行に値 Lucy をロードすると、その行は Employee フィールドに含まれます。したがって、2 行目がチェックされると、値はすでに存在します。

例 4 の結果

| Employee | Address |
| --- | --- |
| Mary | London |
| Lucy | Madrid |

例5：

この例は、すべての値をロードする方法を示しています。

```
Employees:
Load Employee As Name;
LOAD * inline [
Employee|ID|Salary
Bill|001|20000
John|002|30000
Steve|003|35000
] (delimiter is '|');
 
Citizens:
Load * inline [
Employee|Address
Bill|New York
Mary|London
Steve|Chicago
Lucy|Madrid
Lucy|Paris
John|Miami
] (delimiter is '|') where not Exists (Name, Employee);
 
Drop Tables Employees;
```

Lucy のすべての値を取得できるようにするために、2 つのことが変更されました。

* Employees テーブルへの先行ロードが挿入され、Employee の名前が Name に変更されました。

  Load Employee As Name;

* Citizens の Where 条件が次のように変更されました。

  not Exists (Name, Employee).

これにより、Name と Employee のフィールドが作成されます。Lucy の 2 行目をチェックしても、Name にはまだ存在しません。

例 5 の結果

| Employee | Address |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |

例で使用されているデータ：

LOAD \* inline [ Employee|ID|Salary Bill|001|20000 John|002|30000 Steve|003|35000 ] (delimiter is '|'); Citizens: Load \* inline [ Employee|Address Bill|New York Mary|London Steve|Chicago Lucy|Madrid Lucy|Paris John|Miami ] (delimiter is '|');