变量需要在连接级别上工作

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