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
。我不知道语法有什么问题。请帮忙。
答案 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中用大写写所有