# Exists - スクリプト関数

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

情報メモNot Exists() を使用して、項目値がロード済みかどうかを判断することもできますが、Not Exists() を where 節で使用する場合は、用心するようお勧めします。Exists() 関数は、以前にロードされたテーブルと、現在のテーブルに以前にロードされた値の両方をテストします。そのため、最初の出現のみがロードされます。2 番目の出現に遭遇したときには、値はすでにロード済みです。詳細については、例を参照してください。

構文:

Exists(field\_name [, expr])

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

引数：

引数

| 引数 | 説明 |
| --- | --- |
| field\_name | 値を検索する項目の名前。明示的な項目名を引用符なしで使用できます。<br><br>この項目は、スクリプトによってロード済みでなければなりません。つまり、スクリプト内の節にロードされた項目を参照することはできません。 |
| expr | 存在するかどうかを確認したい値。明示的な値または数式を使用して、現在の Load ステートメント内の 1 つまたは複数の項目を参照できます。<br><br>情報メモ現在の Load ステートメントに含まれていない項目を参照することはできません。<br><br>この引数は省略可能です。省略した場合、この関数で、現在のレコード内に field\_name の値がすでに存在しているかどうかが確認されます。 |

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/InterRecordFunctions/Exists.htm)

#### 例と結果:

例 1

`Exists 
 (Employee)`

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

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

例 2

`Exists(Employee, 
 'Bill')`

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

例 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;
```

この結果は、Employee と Address の軸を使用してテーブル ビジュアライゼーションで使用できるテーブルとなります。

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

結果

|  |  |
| --- | --- |
| 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 行目を確認すると、その値は既に存在しています。

結果

| Employee | 住所 |
| --- | --- |
| 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 テーブルへの先行するLOAD が挿入され、Employee の名前が Name に変更されました。

  `
  Load Employee As Name;`

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

  `not Exists (Name, Employee).`

これにより、Name と Employee の項目が作成されます。Lucy の 2 行目を確認すると、引き続き Name には存在していません。

結果

| Employee | 住所 |
| --- | --- |
| Mary | London |
| Lucy | Madrid |
| Lucy | Paris |