iT邦幫忙

0

oracle LEFT OUTER JOIN 用法問題

love2121103 4 月前4897 瀏覽

各位大大好

最近遇到了一個問題

SELECT
emp.EMPLOYEE_ID,
emp.FIRST_NAME,
emp.DEPARTMENT_ID,
epo.NAME
FROM emp, epo,ecp

LEFT OUTER edo ON( epo.ID=edo.ID ) <加入這行 他會說找不到epo.ID 請問為什麼?

where epo.ID=ecp.ID

但是where 我又可以使用epo.ID去比對其他值呢? 是不是我哪裡寫錯了??

看更多先前的討論...收起先前的討論...
wonton iT邦高手 6 級 ‧ 4 月前 檢舉
你又 from 多個 table,又寫 join 的,建議要一致,也就是 from 多個 table,再 where 子句定義 table 的關聯,要嘛都使用 join 會比較好。

我認為 ecp 後面接 join,會以為是 ecp 要和 edo 關聯,所以才找不到 epo 的欄位,但我沒有測試過,所以只是猜的。
海綿寶寶 iT邦超人 1 級 ‧ 4 月前 檢舉
會不會是找不到 edo.ID ?? (不是 epo.ID)
love2121103 iT邦新手 5 級 ‧ 4 月前 檢舉
我在試試看 可能要用join 就要統一用 join 不要多個table!!..

對 他上面是顯示 找不到 epo.id!! 我在試看看 謝謝各位大大的回答....
kucifang iT邦新手 5 級 ‧ 4 月前 檢舉
SELECT emp.EMPLOYEE_ID, emp.FIRST_NAME, emp.DEPARTMENT_ID, epo.NAME
FROM emp leftjoin edo on (edo.ID = emp.XXX)
leftjoin ecp on (edo.XXX = ecp.XXX)
where epo.ID = ecp.ID
應該改寫成這樣
young122333 iT邦新手 4 級 ‧ 4 月前 檢舉
LEFT OUTER edo edo2 ON( epo.ID=edo2 .ID )

給LEFT OUTER 的edo一個別名,如edo2,如上
young122333 iT邦新手 4 級 ‧ 4 月前 檢舉
不然你兩個edo 一樣,會不知道是要使用哪一個edo
love2121103 iT邦新手 5 級 ‧ 4 月前 檢舉
謝謝各位大大 回答
各位大大回答的我會在試看看 謝謝!!!
young122333 iT邦新手 4 級 ‧ 4 月前 檢舉
昨天有點看太快,因為太像有點看錯
你這應該是鼎新hr系統
select *
from emp
left join epo on emp.ID = emp.ID
left join ecp on emp.ID = emp.ID
left join edo on epo.ID = emp.ID
where epo.ID=ecp.ID

FROM 一個資料表後再去JOIN其他三個資料表
emp應該是主索引
(我之前碰過的是這樣,但也不一定100%其他系統是這樣)
FROM emp必須要擺在前面
如edo on emp.ID = edo.ID

尚未有邦友回答

立即登入回答