2017-04-16 105 views
1

我有兩個獨立工作的查詢;如何將兩個工作SELECT查詢合併到一個查詢中?

SELECT e.employee_id, 
     e.first_name, 
     e.last_name, 
     e.job_id, 
     e.salary, 
     e.commission_pct, e.manager_id, 
     e.department_id, 
     j.start_date, 
     j.end_date 
FROM hr.employees e 
LEFT OUTER JOIN hr.job_history j 
    ON e.employee_id = j.employee_id 
WHERE commission_pct IS NULL 

這第一個回顧從兩個不同的表,hr.employeeshr.job_history的信息。

這是第二個;

SELECT e.employee_id, 
     e.last_name, 
     m.employee_id "MgrNo", 
     m.last_name "MgrName" 
FROM hr.employees e 
INNER JOIN hr.employees m ON e.manager_id=m.employee_id 

這是manager_id鏈接employee_id顯示每個員工的經理姓。但是,當我嘗試將兩者包含在一起時,我不斷收到錯誤,告訴我我有一個無效的前綴。有任何想法嗎?

回答

0

「我不斷收到錯誤,告訴我,我有一個無效的前綴。」

這是一個錯字。我們無法在您未發佈的查詢版本中發現它。但基本上你只需要在第一個查詢另一個參加這樣的:

SELECT e.employee_id, 
     e.first_name, 
     e.last_name, 
     e.job_id, 
     e.salary,          
     e.commission_pct, 
     m.employee_id "MgrNo", 
     m.last_name "MgrName", 
     e.department_id, 
     j.start_date, 
     j.end_date 
FROM hr.employees e 
LEFT OUTER JOIN hr.job_history j 
    ON e.employee_id = j.employee_id 
LEFT OUTER JOIN hr.employees m 
    ON m.employee_id = e.manager_id 
WHERE e.commission_pct IS NULL 

我建議使用一個外部聯接,因爲通常不是每個員工都有一個經理(取決於你是如何實現的層次)。

+0

我不能夠感謝你!你能確定我做錯了什麼嗎?我的講師曾教過,爲了從員工ID中獲取經理姓名,我們使用內部聯接來加入一張表... – AdamElsbury

+0

這取決於數據;但如果這是官方的Oracle HR模式'employee_id = 100'有一個空'manager_id'。所以,如果你使用INNER JOIN'king',你的結果將會丟失。 – APC

0

嘗試:

WITH temptable AS (
SELECT e.employee_id, e.last_name, m.employee_id "MgrNo", m.last_name "MgrName" 
FROM hr.employees e 
INNER JOIN hr.employees m ON 
e.manager_id=m.employee_id) 
SELECT e.employee_id, e.first_name, e.last_name, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id, j.start_date, j.end_date, t.MgrNo, t.MgrName 
FROM hr.employees e 
LEFT OUTER JOIN hr.job_history j ON e.employee_id = j.employee_id 
LEFT JOIN temptable t ON t.employee_id = e.employee_id 
WHERE commission_pct IS NULL 

它使用一個作爲一個子查詢,然後加入了你的第一個查詢的關鍵鑰匙。

0

您似乎在嘗試創建一個查詢,該查詢會根據其經理信息生成員工薪水/佣金歷史記錄。您可以組合查詢是這樣的:

SELECT e.employee_id, e.first_name, e.last_name, e.job_id, e.salary, 
     commission_pct, e.manager_id, e.department_id, j.start_date, j.end_date, 
     m.employee_id "MgrNo", m.last_name "MgrName" 
FROM hr.employees e 
INNER JOIN hr.employees m ON e.manager_id=m.employee_id 
LEFT OUTER JOIN hr.job_history j ON e.employee_id = j.employee_id 
WHERE commission_pct IS NULL