2016-08-02 12 views
0

Ich bekomme einen Fehler damit, dass 'Spalte oder globale Variable GRC# nicht gefunden' was ist hier nicht korrekt?Variable muss auf Join Ebene arbeiten

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) 

Antwort

1

Sie können nicht Spalte Aliase in der FROM-Klausel verwenden. Sie können jedoch, wiederholen Sie den Ausdruck:

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; 

Hinweis: Ihre Anfrage würde mit einfachen Tabellen-Aliases leichter zu lesen (einer oder zwei Buchstaben-Abkürzungen aus dem Tabellennamen) und ohne all die doppelten Anführungszeichen.

0

Die bereits akzeptierte Antwort erklärt das Problem ausreichend, aber das Folgende könnte einen zusätzlichen Wert im Hinblick auf die Überwindung der Einschränkung haben.

A abgeleitet Tisch Ausdruck kann verwendet werden, um einen Identifikator [einen Namen] auf einen Ausdruck zuzuweisen, Bezug an anderer Stelle in der SELECT-Abfrage zu dieser Kennung zu aktivieren, und wiederholte Codierung des Ausdrucks zu vermeiden [daher vermieden mögliche Schwierigkeiten, die aus der erforderlichen dualen Aufrechterhaltung eines wiederkehrenden Ausdrucks entstehen können; z.B. mit einem geschachtelten Tabellenausdruck (NTE) als abgeleitete Tabelle [nur Syntax-geprüft] im Folgenden:

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 
Verwandte Themen