在Oracle中查看 - 语法错误

时间:2015-11-22 17:36:53

标签: sql oracle

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;

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

编写查询(并另存为视图)以显示需要重新计算TOTAL_PAB的所有员工。 如果他们的DATE_LAST_CALC在2015年4月1日到2015年4月4日之间,则需要重新计算 (在该时间范围内有病毒报告,因此他们想要重新计算这些)或者2015年6月1日(会计年度开始)和DATE_LAST_CALC之间的差异大于175天。排序方式 区的名称,然后是员工的姓氏

当我尝试运行时,我得到ORA-00933: SQL command not properly ended。我不知道语法有什么问题。请帮忙。

1 个答案:

答案 0 :(得分:5)

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

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

需要:

from district d1, employee e1, total_pab t1

但该查询存在更多问题。

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

如果您重写此操作以使用正确的JOIN运算符,则会立即显示:

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 ?????

条件:or '2015-06-01' - t1.date_last_calc > 175是一个等待的错误。 '2015-06-01'不是date值,它是隐式转换为日期的字符串常量。最好使用显式的date值。使用标准SQL文字:

date '2015-06-01' - t1.date_last_calc > 175` 

或使用Oracle的to_date()函数:

to_date('2015-06-01', 'yyyy-mm-dd') - t1.date_last_calc > 175` is a bug 

between条件也是如此。

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