2012-12-14 40 views
1

我試圖在線搜索答案,並且在這裏很遺憾,它無法解決問題。ORACLE SQL錯誤 - 缺少右括號 - 查詢

這裏是我的代碼:

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號線說缺少右括號。我嘗試添加更多的,但問題仍然存在。

P.S

我目前正在研究的Oracle SQL所以我的知識仍然缺乏一個學生。

+2

試着改變你的'WHERE'到'和' –

+0

@NeilKnight由於原來的查詢中包含一個以上的位置,您可能希望從dt.testDate –

+0

這恐怕不行。 –

回答

1

有在發言一對夫婦的錯誤

  • 參加一個以上的條件,你必須使用AND,不是哪裏
  • 擺脫(在列名和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'); 
+0

這一個工作感謝:) –

1

你正確的查詢應該是

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子句進行過濾,在這種情況下你concatening邏輯運算(在連接)。所以你只需要使用AND。

0

嘗試這一個更直觀

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'; 
+0

提哪一個:-) –