sql - Oracle JOIN 失败

标签 sql oracle ansi-sql

我正在尝试将旧式查询转换为 ANSI。为什么顶部查询失败(错误:ORA-00933:SQL 命令未正确结束)但底部版本有效?

SELECT
  JOBS.STARTED_DATE,
  JOB_SCHEDULE_TECHNICIANS.EMPLOYEE_NUMBER,
  JOB_SCHEDULE_TECHNICIANS.HOURS
FROM JOBS 
JOIN JOB_SCHEDULE_TECHNICIANS ON JOB_SCHEDULE_TECHNICIANS.JOB = JOBS.JOB 
WHERE 
  JOBS.STARTED_TIME BETWEEN to_date('2013-05-01', 'YYYY-MM-DD') 
  AND to_date('2013-05-03', 'YYYY-MM-DD')

SELECT
  JOBS.STARTED_DATE,
  JOB_SCHEDULE_TECHNICIANS.EMPLOYEE_NUMBER, 
  JOB_SCHEDULE_TECHNICIANS.HOURS 
FROM JOBS, JOB_SCHEDULE_TECHNICIANS 
WHERE 
  JOBS.STARTED_TIME BETWEEN to_date('2013-05-01', 'YYYY-MM-DD') 
  AND to_date('2013-05-03', 'YYYY-MM-DD')
  AND JOB_SCHEDULE_TECHNICIANS.JOB = JOBS.JOB

最佳答案

我认为上述两个查询都没有任何问题。

我建议按照 Mathew Strawbridge 的评论添加一个分号 (;)

像这样:

SELECT
  JOBS.STARTED_DATE,
  JOB_SCHEDULE_TECHNICIANS.EMPLOYEE_NUMBER,
  JOB_SCHEDULE_TECHNICIANS.HOURS
FROM JOBS 
JOIN JOB_SCHEDULE_TECHNICIANS ON JOB_SCHEDULE_TECHNICIANS.JOB = JOBS.JOB 
WHERE 
  JOBS.STARTED_TIME BETWEEN to_date('2013-05-01', 'YYYY-MM-DD') 
  AND to_date('2013-05-03', 'YYYY-MM-DD')
; --  <- Here
SELECT
  JOBS.STARTED_DATE,
  JOB_SCHEDULE_TECHNICIANS.EMPLOYEE_NUMBER, 
  JOB_SCHEDULE_TECHNICIANS.HOURS 
FROM JOBS, JOB_SCHEDULE_TECHNICIANS 
WHERE 
  JOBS.STARTED_TIME BETWEEN to_date('2013-05-01', 'YYYY-MM-DD') 
  AND to_date('2013-05-03', 'YYYY-MM-DD')
  AND JOB_SCHEDULE_TECHNICIANS.JOB = JOBS.JOB

关于sql - Oracle JOIN 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448030/

相关文章:

python - 如何在 SQLAlchemy 中使用过滤运算符

html - 在 html 电子邮件中嵌入图像

sql - Oracle 触发器——更新行而不是删除

sql - 为什么 SQL ANSI-92 标准没有比 ANSI-89 更好地被采用?

mysql - 基本 SQL。有没有更好的方法来使用聚合函数?

sql - 我们是否应该将代理键与自然键(唯一索引均值)结合起来以提高可读性并易于查询选择?

oracle - 我可以在 Oracle 中检测表的 DDL 版本吗?

sql - 如何将 2 列与 SQL 中所有可能的组合合并?

google-bigquery - 在滚动时间范围内计算唯一 ID

android - SQLiteQueryBuilder 中的 selectionArgs 不适用于列中的整数值