select J.job_title,
D.department_name,
E.first_name || ' ' || E.last_name as "Employee Name",
H.start_date
from job_history H
join jobs J
on H.job_id = J.job_id
join departments D
on H.department_id = D.department_id
join employees E
on H.department_id = E.department_id
where H.start_date between '01-Jan-93' and '03-Aug-97';
第二次查詢
SELECT job_title,
department_name,
first_name || ' ' || last_name AS Employee_name,
start_date
FROM job_history
JOIN jobs USING (job_id)
JOIN departments USING (department_id)
JOIN employees USING (employee_id)
WHERE start_date between '01-jan-93' AND '08-aug-97';
uj5u.com熱心網友回復:
您會得到不同的答案(第一個查詢中的更多行,這很可能是錯誤的查詢),因為在第一個查詢中,您將最后一個表 , 連接到列上employees的第一個表 , 。(在您加入的第二個查詢中,這可能是正確的方法。)job_historydepartment_idemployee_id
這樣,對于job_history匹配的每一行和列上employees表中的員工,您將在連接輸出中獲得一行 - 即使員工與員工 ID 不匹配該行。部門中的所有員工都將出現在輸出中。department_idjob_historyExecutive
請注意,您的where條款不一樣(一個時期在 8 月 3 日結束,另一個時期在 8 月 8 日結束),但這不是輸出不同的原因。(雖然它可能在不同的資料上。)
此外,他們應該教你不要在日期比較中使用字串;但這與您的問題無關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486120.html
