2013-02-16 38 views
0

我看到這條SQL語句的工作原理:爲什麼這個聲明在它是子查詢的一部分時工作?

SELECT * 
FROM Company 
LEFT JOIN (
    Departments 
    INNER JOIN Employees 
    ON Departments.dep_id = Employees.Dep_ID 
    ) ON Company.compId = Departments.Comp_ID; 

但這句話:

Departments INNER JOIN Employees ON Departments.dep_id = Employees.Dep_ID 

無法解析。

這是否意味着僅針對子查詢的簡短版本?

+1

沒有更多的上下文,很難理解你的問題。請修改您的問題以顯示不起作用的完整查詢。順便說一下,查詢工作沒有一個子查詢,它只是有一些多餘的括號。 – 2013-02-16 14:56:55

+0

@DanBracuk:不起作用的查詢是第二個語句。它是在第一個查詢的'LEFT JOIN'之後的括號內的內容 – Cratylus 2013-02-16 15:00:27

+2

@Cratylus括號內的語句不是子查詢並且不能用作查詢。它是連接表。 – 2013-02-16 15:02:48

回答

3

此:

Departments INNER JOIN Employees ON Departments.dep_id = Employees.Dep_ID 

不能被解析,因爲它不是一個完整的查詢。它缺少開始子句,在這種情況下是一個select子句。開始子句的其他選項是插入,更新或刪除。

它也缺少關鍵字「來自」。此外,雖然不是強制性的,但大多數select查詢都有一個where子句來獲取他們想要的記錄,而不是整個數據庫。

+0

爲什麼在第一個查詢中使用它時會起作用? – Cratylus 2013-02-16 15:09:43

+1

因爲在第一個查詢中它是from子句的一部分。 – 2013-02-16 15:13:13

1

您可能會缺少「SELECT FROM」?

+0

爲什麼當它是第一個查詢的一部分時不需要? – Cratylus 2013-02-16 15:00:51

相關問題