正在尝试运行此sql,但我不确定是否正确

正在尝试运行此sql,但我不确定是否正确,sql,db2,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 JOI

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

您的查询存在一些问题

首先,您只需要引用表别名,而不需要引用完整的表名,例如:

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
其次,where子句仅重申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别名。

将来,您可能希望包括确切的错误消息和代码,而不仅仅是说我有错误。错误是…?谢谢或者是PS_ACCT表的REPORT_TYPE列的帮助。我仍然得到错误。DB2数据库错误:error[42601][IBM][DB2/AIX64]SQL0104N在T.REPORT_TYPE后面发现了一个意外的标记V1作为C。预期的标记可能包括:INTO.SQLSTATE=42601提到您正在使用DB2会有所帮助……但无论如何,错误消息告诉您出了什么问题。如果您需要更多帮助,请发布您在问题中执行的全部代码。这是完整的代码T我正在尝试运行的内容。选择不同的V1.TREE\u名称为'MSTR\u ACCOUNT\u ALL',V1.TREE\u节点为'REAL\u ESTATE\u EXP',V1.REPORT\u TYPE为'C'V1.ACCOUNT FROM PS\u ACCT V1 internal JOIN PS\u TRAN F1 ON F1.ACCOUNT=V1.ACCOUNT internal JOIN PS\u ACCOUNT V2 ON V2.REPORT\u TYPE=F1.REPORT\u TYPE其中F1.ACCOUNT=V1.ACCOUNT=V1.ACCOUNT我对DB2不太了解但即使是我也能看出这是无效的SQL。例如,我认为V1.REPORT_类型中缺少一个逗号作为“C”V1.ACCOUNT。另外,我不知道DB2中的列别名是否用引号分隔。我已更改了此问题,但仍然有一个错误。选择不同的V1.TREE_名称作为MSTR_ACCOUNT_ALL,选择V1.TREE_节点作为REAL_ESTATE_EXP,选择V1.REPORT_类型作为C,V1.ACCOUNT FROM PS_ACCT V1 Internal JOIN PS_TRAN F1 ON F1.ACCOUNT=V1.ACCOUNT Internal JOIN PS_ACCT V2 ON V2.REPORT_TYPE=F1.REPORT_TYPE其中F1.ACCOUNT=V1.ACCOUNT Eroor为V1.PS_ACCT.ACCOUNT在使用它的上下文中无效。SQLSTATE=42703