# Exists - 脚本函数

Exists() 用于确定是否已经将特定字段值加载到加载脚本中的字段。此函数用于返回 TRUE 或 FALSE，这样它可以用于 LOAD 语句或 IF 函数中的 where 子句。

信息注释也可以使用 Not Exists() 来确定字段值是否尚未加载，但如果在 where 子句中使用 Not Exists() 则建议多加小心。Exists() 函数可测试以前加载的表和当前表中以前加载的值。所以，只会加载第一次出现的项。如果遇到第二次出现的项，值已被加载。更多信息请参见示例。

语法：

Exists(field\_name [, expr] )

**返回数据类型：** 布尔值

参数：

Exists 参数

| 参数 | 说明 |
| --- | --- |
| field\_name | 要在其中搜索值的字段的名称。可以使用不带引号的显式字段名称。<br><br>字段必须已经由脚本加载。这意味着，不能引用在脚本中后面的子句中加载的字段。 |
| expr | 要检查其是否存在的值。可以使用显式值或引用当前 LOAD 语句中一个或多个字段的表达式。<br><br>信息注释不能引用当前 LOAD 语句中未包含的字段。<br><br>该参数是可选的。如果省略它，函数将检查当前记录中 field\_name 的值是否已存在。 |

示例 1:

`Exists 
 (Employee)`

如果当前记录中的字段值 Employee 已存在于任何以前已读入的包含该字段的记录，则返回 -1 (True)。

示例 2:

`Exists(Employee, 
 'Bill')`

如果在字段 Employee 的当前内容中发现字段值 'Bill'，则返回 -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 的值，但结果表中只包含一个。加载有值 Lucy 的第一行时，该值将包含在 Employee 字段中。因此，当检查第二行时，该值已经存在。

示例 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 的所有值，进行了两项更改：

* Employees 表的前一次加载已插入，其中 Employee 重命名为 Name。

  Load Employee As Name;

* 将 Citizens 中的 Where 条件更改为：

  not Exists (Name, Employee).

这将为 Name 和 Employee 创建字段。如果检查带 Lucy 的第二行，它仍然未存在于 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 '|');