试图运行这个SQL,但我不确定我是否正确

时间:2014-03-18 18:47:54

标签: sql db2

您好我正在尝试运行此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

1 个答案:

答案 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别名。