【问题标题】:ORACLE SQL Error - Missing Right Parenthesis - Query [closed]ORACLE SQL 错误 - 缺少右括号 - 查询 [关闭]
【发布时间】:2012-12-14 15:03:50
【问题描述】:

我尝试在网上搜索答案,但不幸的是它无法解决问题。

这是我的代码:

SELECT d.driverID, 
       e.firstname, 
       e.lastname, 
       t.testid, 
       t.testType
 FROM driver d
 LEFT JOIN employee e 
   ON (e.employeeID = d.employeeID)
INNER JOIN driver_test dt 
   ON (d.driverID = dt.driverID  WHERE dt.testDate(BETWEEN TO_DATE('01-JAN-2012', 'dd-mm-yyyy') AND TO_DATE('31-JAN-2012', 'dd-mm-yyyy')))
RIGHT JOIN test t ON dt.testID = t.testID WHERE (t.testType='Alcohol');

问题出在第 4 行。它说缺少右括号。我尝试添加其他的,但问题仍然存在。

附言

我是一名学生,目前正在学习 Oracle SQL,所以我的知识仍然缺乏。

【问题讨论】:

  • 尝试将您的 WHERE 更改为 AND
  • @NeilKnight 由于原始查询包含多个 WHERE,您可能需要提及哪一个 :-)

标签: sql oracle ora-00907


【解决方案1】:

您的陈述中有几个错误

  • 要加入多个条件,您必须使用 AND,而不是 WHERE
  • 去掉列名和BETWEEN之间的(

固定查询:

SELECT d.driverID,
   e.firstname,
   e.lastname,
   t.testid,
   t.testType
FROM driver d
  LEFT JOIN employee e
    ON (e.employeeID = d.employeeID)
 INNER JOIN driver_test dt
    ON (d.driverID = dt.driverID AND
       dt.testDate BETWEEN TO_DATE('01-JAN-2012',
                                    'dd-mm-yyyy') AND
       TO_DATE('31-JAN-2012',
                'dd-mm-yyyy'))
 RIGHT JOIN test t
    ON dt.testID = t.testID
 WHERE (t.testType = 'Alcohol');

【讨论】:

    【解决方案2】:

    你的正确查询应该是

    SELECT d.driverID, e.firstname, e.lastname, t.testid, t.testType
    FROM driver d
    LEFT JOIN employee e ON(e.employeeID = d.employeeID)
    INNER JOIN driver_test dt ON(d.driverID = dt.driverID and dt.testDate(BETWEEN TO_DATE('01-JAN-2012', 'dd-mm-yyyy') AND TO_DATE('31-JAN-2012', 'dd-mm-yyyy')))
    RIGHT JOIN test t ON dt.testID = t.testID 
    WHERE (t.testType='Alcohol');
    

    Where 子句用于过滤,在这种情况下,您将连接逻辑操作(在连接中)。所以你只需要使用 AND。

    【讨论】:

      【解决方案3】:

      试试这个更清晰

      SELECT d.driverID, e.firstname, e.lastname, t.testid, t.testType
      FROM driver d
      LEFT JOIN employee e ON(e.employeeID = d.employeeID)
      INNER JOIN driver_test dt ON(d.driverID = dt.driverID)
      RIGHT JOIN test t ON dt.testID = t.testID
      where dt.testDate(BETWEEN TO_DATE('01-JAN-2012', 'dd-mm-yyyy') AND 
      TO_DATE('31-JAN-2012','dd-mm-yyyy'))) and t.testType='Alcohol';
      

      【讨论】:

      • 恐怕这行不通。
      猜你喜欢
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多