匹配

阅读(271) 标签: 匹配, 关联,

功能:

左表按基准列与右表关联,过滤出匹配的记录。类似于 SQL 的 IN / NOT IN 或 LEFT JOIN + IS NULL。

语法:

匹配 [<基准列名>] [关联表 <关联表名>] [<关联列名>] [方式] [条件 <条件式>]

参数:基准列名

左表(当前表)中用于匹配的一个或多个字段,包括#。

可选,省略参数名,缺省表示必须依靠参数条件 <条件式>建立完全非等值关联;有本参数时,用本参数建立等值关联,可以继续用参数条件 <条件式>建立非等值关联。

参数:关联表 <关联表名>

用于匹配到左表上的右表。

必填,不可省略参数名。

参数:关联列名

右表用于匹配的一个或多个字段,包括#。

可选,省略参数名。省略表示用主键或基准列同名的列。

参数:方式

关联后的过滤方式,枚举类型,枚举值:不匹配删除、匹配删除。前者表示留下能匹配上的记录,后者表示留下不能匹配的记录。

可选,省略参数名,缺省是"不匹配删除"。

参数:条件 <条件式>

关联时的过滤条件。左表字段用@后缀,右表字段无后缀。

可选,不可省略参数名。

示例:

部门表数据如下:

DEPT

MANAGER

Administration

1

HR

5

Production

7

R&D

2

Sales

3

员工表数据如下: 

EID

NAME

DEPT

SALARY

1

Rebecca

R&D

7000

2

Ashley

Finance

11000

3

Rachel

Sales

9000

4

Emily

HR

7000

5

Ashley

R&D

16000

6

Matthew

Sales

11000

7

Alexis

Sales

9000

8

Megan

Marketing

11000

9

Victoria

HR

3000

10

Ryan

R&D

13000

以下示例脚本中,锚点均为员工表:

匹配 DEPT 关联表 部门表 不匹配删除 DEPT //保留员工表中能匹配上部门表DEPT列的记录,结果如下:

EID

NAME

DEPT

SALARY

1

Rebecca

R&D

7000

3

Rachel

Sales

9000

4

Emily

HR

7000

5

Ashley

R&D

16000

6

Matthew

Sales

11000

7

Alexis

Sales

9000

9

Victoria

HR

3000

10

Ryan

R&D

13000

匹配 DEPT; 关联表 部门表; 匹配删除  //保留员工表中匹配不上的记录,关联列名省略用基准列中同名的列,结果如下:

EID

NAME

DEPT

SALARY

2

Ashley

Finance

11000

8

Megan

Marketing

11000

匹配 DEPT 关联表 部门表; 条件 (SALARY@>=5000 且 (["Sales","HR"] 包含 DEPT))  //保留员工表中薪资≥5000且部门在指定列表内的记录,结果如下:

EID

NAME

DEPT

SALARY

3

Rachel

Sales

9000

4

Emily

HR

7000

6

Matthew

Sales

11000

7

Alexis

Sales

9000