您好我正在尝试运行此sql但是因为我是sql的新手我遇到错误并且不确定我是否正确行事。
SELECT DISTINCT
V1.TREE_NAME AS "MSTR_ACCOUNT_ALL",
V1.TREE_NODE AS "REAL_ESTATE_EXP",
V1.REPORT_TYPE AS "C",
V1.ACCOUNT FROM PS_ACCT V1
INNER JOIN PS_TRAN F1 ON F1.ACCOUNT = V1.ACCOUNT
INNER JOIN PS_ACCT V2 ON V2.REPORT_TYPE = F1.REPORT_TYPE
where F1.ACCOUNT = V1.ACCOUNT
我收到此错误
DB2数据库错误:错误[42703] [IBM] [DB2 / AIX64 SQL0206N“V1.PS_ACCT.ACCOUNT”在使用它的上下文中无效。 SQLSTATE = 42703
答案 0 :(得分:1)
您的查询存在一些问题。
首先,您只需要引用表别名,而不是完整的表名,例如:
SELECT DISTINCT V1.TREE_NAME = 'MSTR_ACCOUNT_ALL',
V1.TREE_NODE = 'REAL_ESTATE_EXP',
V1.REPORT_TYPE = 'C'
V1.ACCOUNT
FROM PS_ACCT V1
INNER JOIN PS_TRAN F1 ON F1.ACCOUNT = V1.ACCOUNT
INNER JOIN PS_ACCT V2 ON V2.REPORT_TYPE = F1.REPORT_TYPE
where F1.ACCOUNT = V1.ACCOUNT
其次,你的"其中"子句只是重申F1和V1之间的连接条件,所以你可以安全地省略它(这不会导致任何错误):
SELECT DISTINCT V1.TREE_NAME = 'MSTR_ACCOUNT_ALL',
V1.TREE_NODE = 'REAL_ESTATE_EXP',
V1.REPORT_TYPE = 'C'
V1.ACCOUNT
FROM PS_ACCT V1
INNER JOIN PS_TRAN F1 ON F1.ACCOUNT = V1.ACCOUNT
INNER JOIN PS_ACCT V2 ON V2.REPORT_TYPE = F1.REPORT_TYPE
最后,您的SELECT子句只需要列出您要报告的列 - =
这里的语法无效:
SELECT DISTINCT
V1.TREE_NAME,
V1.TREE_NODE,
V1.REPORT_TYPE,
V1.ACCOUNT
FROM PS_ACCT V1
INNER JOIN PS_TRAN F1 ON F1.ACCOUNT = V1.ACCOUNT
INNER JOIN PS_ACCT V2 ON V2.REPORT_TYPE = F1.REPORT_TYPE
现在,您提供的信息非常有限,并不清楚PS_ACCT
表/视图是否有一个名为REPORT_TYPE
的列。如果它没有,则查询将失败,因为您在此处引用了V1
别名。