Sql 在Oracle中查看— ;语法错误

Sql 在Oracle中查看— ;语法错误,sql,oracle,Sql,Oracle,我正在尝试在Oracle中创建一个视图 编写查询(并另存为视图)以显示需要重新计算其总PAB的所有员工。 如果其最后计算日期在2015年4月1日至2015年4月4日之间,则需要重新计算 (当时有病毒报告,因此他们希望重新计算)或2015年6月1日(财政年度开始)与上次计算日期之间的差异大于175天。分类 地区名称,然后是员工的姓氏 当我尝试运行此命令时,我发现ORA-00933:SQL命令没有正确结束。我不知道语法有什么问题。请提供任何帮助。Oracle不支持表别名的AS关键字,因此 SELEC

我正在尝试在Oracle中创建一个视图

编写查询(并另存为视图)以显示需要重新计算其总PAB的所有员工。 如果其最后计算日期在2015年4月1日至2015年4月4日之间,则需要重新计算 (当时有病毒报告,因此他们希望重新计算)或2015年6月1日(财政年度开始)与上次计算日期之间的差异大于175天。分类 地区名称,然后是员工的姓氏


当我尝试运行此命令时,我发现
ORA-00933:SQL命令没有正确结束
。我不知道语法有什么问题。请提供任何帮助。

Oracle不支持表别名的
AS
关键字,因此

SELECT D1.DISTRICT_NAME, E1.EMP_FNAME, E1.EMP_LNAME, T1.TAX_YEAR, T1.DATE_LAST_CALC
FROM DISTRICT AS D1, EMPLOYEE AS E1, TOTAL_PAB AS T1
WHERE T1.DATE_LAST_CALC BETWEEN '2015-04-01' AND '2015-04-04'
OR '2015-06-01' - T1.DATE_LAST_CALC > 175
ORDER BY DISTRICT_NAME, EMP_LNAME;
需要:

from district as d1, employee as e1, total_pab as t1

但这一质疑还有更多问题

因为在
where
子句中使用的是过时的、古老的隐式联接,所以没有注意到缺少三个表的联接条件

如果您将其重写为使用适当的
JOIN
运算符,则会立即看到:

from district d1, employee e1, total_pab t1
还有一个条件:
或'2015-06-01'-t1.date\u last\u calc>175
是一个错误,正好等待
'2015-06-01'
不是
日期
值,它是一个字符串常量,隐式转换为日期。最好使用显式的
date
值。使用标准SQL文本:

SELECT d1.district_name, e1.emp_fname, e1.emp_lname, t1.tax_year, t1.date_last_calc
FROM district d1
  JOIN employee e1 ON ?????
  JOIN total_pab t1 ON ?????
或者使用Oracle的
to_date()
函数:

date '2015-06-01' - t1.date_last_calc > 175` 
您的
介于
之间的情况也是如此



也没有理由在SQL中用大写写所有内容Oracle不支持表别名的
AS
关键字,因此

SELECT D1.DISTRICT_NAME, E1.EMP_FNAME, E1.EMP_LNAME, T1.TAX_YEAR, T1.DATE_LAST_CALC
FROM DISTRICT AS D1, EMPLOYEE AS E1, TOTAL_PAB AS T1
WHERE T1.DATE_LAST_CALC BETWEEN '2015-04-01' AND '2015-04-04'
OR '2015-06-01' - T1.DATE_LAST_CALC > 175
ORDER BY DISTRICT_NAME, EMP_LNAME;
需要:

from district as d1, employee as e1, total_pab as t1

但这一质疑还有更多问题

因为在
where
子句中使用的是过时的、古老的隐式联接,所以没有注意到缺少三个表的联接条件

如果您将其重写为使用适当的
JOIN
运算符,则会立即看到:

from district d1, employee e1, total_pab t1
还有一个条件:
或'2015-06-01'-t1.date\u last\u calc>175
是一个错误,正好等待
'2015-06-01'
不是
日期
值,它是一个字符串常量,隐式转换为日期。最好使用显式的
date
值。使用标准SQL文本:

SELECT d1.district_name, e1.emp_fname, e1.emp_lname, t1.tax_year, t1.date_last_calc
FROM district d1
  JOIN employee e1 ON ?????
  JOIN total_pab t1 ON ?????
或者使用Oracle的
to_date()
函数:

date '2015-06-01' - t1.date_last_calc > 175` 
您的
介于
之间的情况也是如此



也没有理由在SQL中用大写写所有内容

您确定从oracle中的另一个日期减去一个日期会产生天数吗?为什么会产生几天而不是几秒钟?或者两周?米克纳基斯:是的,这就是OracleYes对日期的定义(并有明确的记录)。它说日期是以天为单位存储的在ANSI-92 SQL标准(20多年前)中,旧式的逗号分隔表列表样式被正确的ANSI
JOIN
语法所取代,它的使用是不受欢迎的。您确定在oracle中,从另一个日期减去一个日期会产生天数吗?为什么会产生几天而不是几秒钟?或者两周?米克纳基斯:是的,这就是OracleYes对日期的定义(并有明确的记录)。它说日期是以天为单位存储的在ANSI-92 SQL标准(20多年前)中,旧式的逗号分隔的表列表样式被正确的ANSI
JOIN
语法所取代,并且它的使用非常简单discouraged@apc:列表中没有明显的
query@apc:查询中没有明显的