您可以引用在同一个数据库中创建的多个表。在 SELECT 语句中使用 FROM 子句连接两个表的数据。
下例假设您有两个数据库表 USERTABLE1 和 USERTABLE2。这两个表都有两个 char(6) 数据类型列(或与之相当的列)。
USERTABLE1 包含两行:
Column1 | Column2 | |
---|---|---|
Row 1 | value1 | value2 |
Row 2 | value3 | value4 |
USERTABLE2 包含两行:
Column3 | Column4 | |
---|---|---|
Row 1 | value5 | value6 |
Row 2 | value7 | value8 |
单个 SELECT 语句引用的所有表必须在同一个数据库中。数据库可以是缺省数据库(由节点的“数据源”属性指定)或另一个数据库(由 SELECT 语句的 FROM 子句指定)。
请配置您正在使用的 Compute、Filter 或 Database 节点以标识您已经在其中定义了表的数据库。例如,如果您正在使用缺省数据库,则右键单击节点,选择打开 ESQL,然后在此节点的模块中编写以下 ESQL 语句:
SET OutputRoot.XML.Test.Result[] = (SELECT A.Column1 AS FirstColumn, A.Column2 AS SecondColumn, B.Column3 AS ThirdColumn, B.Column4 AS FourthColumn FROM Database.USERTABLE1 AS A, Database.USERTABLE2 AS B WHERE A.Column1 = 'value1' AND B.Column4 = 'value8' );
这些语句会生成以下输出消息内容:
<Test> <Result> <FirstColumn>value1</FirstColumn> <SecondColumn>value2</SecondColumn> <ThirdColumn>value7</ThirdColumn> <FourthColumn>value8</FourthColumn> </Result> </Test>
上述示例显示了如何从两个数据库表访问数据。您可以编写更多的复合 FROM 子句用来访问多个数据库表(虽然所有的表都必须在同一个数据库中)。您还可以引用一个或多个消息树,并使用 SELECT 将表和表、消息和消息或表和消息连接起来。从 XML 消息和数据库表中连接数据 提供如何将消息数据与数据库表中的数据合并起来的示例。
(由节点的数据源属性定义)。
如果在 WHERE 子句的列标识上指定了 ESQL 函数或过程,则将它们作为数据库查询的一部分而不是作为 ESQL 来处理。
请参阅以下示例:
SET OutputRoot.XML.Test.Result = THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T WHERE UPPER(T.Column2) = 'VALUE2');
它尝试返回行,行中 Column2 的值转换为大写的 VALUE2。不过只有数据库管理器才能决定任何给定行的 T.Column2 值,因此在发出数据库查询之前,ESQL 无法处理它,因为 WHERE 子句决定返回到消息流的行。
因此,UPPER 传递到数据库管理器作为它的处理的一部分。但是如果数据库管理器无法处理 select 语句中的令牌,将返回错误。