2017-03-04 147 views
0

我只是想知道如何從表列中選擇多個記錄。請參閱下面的查詢。Oracle 11g - 從表列中選擇多個記錄

SELECT DISTINCT DEPARTMENT_NAME, CITY, COUNTRY_NAME 
FROM OEHR_DEPARTMENTS 
NATURAL JOIN OEHR_EMPLOYEES 
NATURAL JOIN OEHR_LOCATIONS 
NATURAL JOIN OEHR_COUNTRIES 
WHERE JOB_ID = 'SA_MAN' AND JOB_ID = 'SA_REP' 
; 

基本上,我希望能夠select記錄從表列我有,但是當你使用AND它只顯示SA_MAN而不是SA_REP。我也嘗試使用OR,並且它沒有顯示選中的行。如果沒有它只顯示一個或另一個,我怎麼能夠選擇兩個作業ID?

對不起,這可能聽起來像一個愚蠢的問題(可能沒有措辭正確),但我對Oracle 11g SQL很新。

+0

檢查您的where語句。你已經完成了自然連接,它應該工作正常(相信無論表名是什麼)。嘗試提及它應該過濾的特定表。 – Prajwal

回答

0

爲了您在調試時的舒適感,我建議您使用內部連接而不是自然連接。

where子句令人困惑,如果不是完全錯誤的話,因爲您沒有清楚應該過濾哪張表'JOB_ID'。使用內部連接,爲表提供別名,並在where子句中引用這些別名。

select distinct DEPARTMENT_NAME, CITY, COUNTRY_NAME 
from OEHR_DEPARTMENTS t1 
join OEHR_EMPLOYEES t2 
    on ... 
join OEHR_LOCATIONS t3 
    on ... 
join OEHR_COUNTRIES t4 
    on ... 
where tn.JOB_ID = 'SA_MAN' AND tm.JOB_ID = 'SA_REP' 

莫名其妙地改寫查詢這樣後,你必須對你有where條款,我敢打賭,將是一個OR在使用邏輯運算符一個更清晰的視野。

EDIT(被賦予了更多的細節後)

要列出聘用人員與既有「SA_MAN」和「SA_REP」 JOB_ID部門,你有加入與職工的部門表兩次,一次過濾器job_id='SA_MAN'job_id='SA_REP'

select distinct DEPARTMENT_NAME, CITY, COUNTRY_NAME 
from OEHR_DEPARTMENTS t1 
join OEHR_EMPLOYEES t2 
on  t1.department_id = t2.department_id --guessing column names 
join OEHR_EMPLOYEES t3 
    on t1.department_id = t3.department_id --guessing column names 
join OEHR_LOCATIONS t4 
    on t1.location_id = t4.location_id --guessing column names 
join OEHR_COUNTRIES t5 
    on t4.country_id = t5.country_id --guessing column names 
where t2.job_id = 'SA_MAN' and t3.job_id = 'SA_REP' 
order by 1, 2, 3 
+0

謝謝,我會試試這個。如果我仍然錯誤,我會給更多的細節 – Axioms

+0

你怎麼知道JOB_ID來自兩個不同的表? – BobC

+0

似乎仍然是錯誤的。這可能是我愚蠢的....而JOB_ID來自一個名爲OEHR_EMPLOYEES的表。 – Axioms