变量需要在连接级别上工作
variable needs to work on join level
我遇到了一个错误,'column or global variable grc# not found'这里哪里不对?
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#", "ADRES1"."ADINTA", "ADRES1"."ADENT#", "ADRES1"."ADSFX#", adres1.adent# concat adres1.adsfx# as "grc#"
FROM
"ASTDTA"."OEINH2" "OEINH2" INNER JOIN "ASTDTA"."ADRES1" "ADRES1" ON "OEINH2"."IHGRC#"= "grc#"
WHERE ("OEINH2"."IHDOCD">=20160722 AND "OEINH2"."IHDOCD"<=201600801)
您不能在 FROM
子句中使用列别名。但是,您可以重复表达式:
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#", "ADRES1"."ADINTA", "ADRES1"."ADENT#",
"ADRES1"."ADSFX#", adres1.adent# concat adres1.adsfx# as "grc#"
FROM "ASTDTA"."OEINH2" "OEINH2" INNER JOIN
"ASTDTA"."ADRES1" "ADRES1"
ON "OEINH2"."IHGRC#"= adres1.adent# concat adres1.adsfx#
WHERE "OEINH2"."IHDOCD" >= 20160722 AND "OEINH2"."IHDOCD" <= 201600801;
注意:使用更简单的 table 别名(table 名称的一个或两个字母缩写)并且不使用所有双引号,您的查询将更易于阅读。
已经接受的答案充分解释了这个问题,但以下内容可能对克服限制有一些额外的价值。
A derived-table expression 可用于将 identifier [a name] 分配给表达式,以在 SELECT 查询的其他地方启用对该标识符的引用,并避免重复编码表达式 [因此避免可能因需要 双重 维护重复出现的表达式而产生的潜在困难];例如使用嵌套 Table 表达式 (NTE) 作为派生的 table [仅语法检查] 在以下内容中:
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#"
, NTE."ADINTA", NTE."ADENT#", NTE."ADSFX#"
, NTE."grc#"
/* Above two lines could be replaced with just: NTE.* */
FROM "ASTDTA"."OEINH2" "OEINH2"
INNER JOIN
( SELECT "ADRES1"."ADINTA", "ADRES1"."ADENT#"
, "ADRES1"."ADSFX#"
, adres1.adent# concat adres1.adsfx# as "grc#"
FROM "ASTDTA"."ADRES1" "ADRES1"
) AS NTE
ON "OEINH2"."IHGRC#" = NTE."grc#"
WHERE "OEINH2"."IHDOCD" BETWEEN 20160722 AND 201600801
我遇到了一个错误,'column or global variable grc# not found'这里哪里不对?
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#", "ADRES1"."ADINTA", "ADRES1"."ADENT#", "ADRES1"."ADSFX#", adres1.adent# concat adres1.adsfx# as "grc#"
FROM
"ASTDTA"."OEINH2" "OEINH2" INNER JOIN "ASTDTA"."ADRES1" "ADRES1" ON "OEINH2"."IHGRC#"= "grc#"
WHERE ("OEINH2"."IHDOCD">=20160722 AND "OEINH2"."IHDOCD"<=201600801)
您不能在 FROM
子句中使用列别名。但是,您可以重复表达式:
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#", "ADRES1"."ADINTA", "ADRES1"."ADENT#",
"ADRES1"."ADSFX#", adres1.adent# concat adres1.adsfx# as "grc#"
FROM "ASTDTA"."OEINH2" "OEINH2" INNER JOIN
"ASTDTA"."ADRES1" "ADRES1"
ON "OEINH2"."IHGRC#"= adres1.adent# concat adres1.adsfx#
WHERE "OEINH2"."IHDOCD" >= 20160722 AND "OEINH2"."IHDOCD" <= 201600801;
注意:使用更简单的 table 别名(table 名称的一个或两个字母缩写)并且不使用所有双引号,您的查询将更易于阅读。
已经接受的答案充分解释了这个问题,但以下内容可能对克服限制有一些额外的价值。
A derived-table expression 可用于将 identifier [a name] 分配给表达式,以在 SELECT 查询的其他地方启用对该标识符的引用,并避免重复编码表达式 [因此避免可能因需要 双重 维护重复出现的表达式而产生的潜在困难];例如使用嵌套 Table 表达式 (NTE) 作为派生的 table [仅语法检查] 在以下内容中:
SELECT "OEINH2"."IHDOCD", "OEINH2"."IHINV#"
, NTE."ADINTA", NTE."ADENT#", NTE."ADSFX#"
, NTE."grc#"
/* Above two lines could be replaced with just: NTE.* */
FROM "ASTDTA"."OEINH2" "OEINH2"
INNER JOIN
( SELECT "ADRES1"."ADINTA", "ADRES1"."ADENT#"
, "ADRES1"."ADSFX#"
, adres1.adent# concat adres1.adsfx# as "grc#"
FROM "ASTDTA"."ADRES1" "ADRES1"
) AS NTE
ON "OEINH2"."IHGRC#" = NTE."grc#"
WHERE "OEINH2"."IHDOCD" BETWEEN 20160722 AND 201600801