2013-05-01 60 views
1

我想通過以下代碼創建一個多對多的子查詢。如何在oracle中進行多對多的子查詢?

SELECT e.ep_suragate_pk FROM episode e 
    JOIN (
     SELECT n.name FROM actor n 
     JOIN episode_actor ea 
     ON n.act_suragate_pk = ea.act_suragate_pk 
    ) ep_act 
    ON ep_act.ep_suragate_pk = e.ep_suragate_pk; 

我得到一個ORA-00904:無效的標識符錯誤,但所有的列都存在。

 episode 
    ------- 
    ep_suragate_pk 


    episode_actor 
    ------------- 
    ep_suragate_pk 
    act_suragate_pk 


    actor 
    ----- 
    act_suragate_pk 

如果有人可以幫助我瞭解我要去哪裏錯了,我將不勝感激。謝謝。

回答

2

你並不需要所有的這些子查詢

select e.ep_suragate_pk 
from episode e , episode_actor ea , actor n 
where ea.ref_id = e.ep_suragate_pk 
and  n.act_suragate_pk = ea.act_suragate_pk 
3

子查詢需要選擇列ea.ep_suragate_pk以解決無效標識問題。不確定是否會得到你想要的結果。

+0

非常感謝。你在兩個賬戶上都是對的。我給n.name一個別名,並使用select e.ep_suragate_pk,ep_act.AliasName在第一個查詢中獲取正確的信息。 – user1763170 2013-05-01 09:29:57

2

內部查詢

(
    SELECT n.name FROM actor n 
    JOIN episode_actor ea 
    ON n.act_suragate_pk = ea.act_suragate_pk 
) ep_act 

沒有列p_suragate_pk加盟

ep_act 
ON ep_act.ep_suragate_pk = e.ep_suragate_pk; 

,所以你可以修改這樣

SELECT e.ep_suragate_pk FROM episode e 
JOIN (
    SELECT n.name,n.act_suragate_pk FROM actor n 
    JOIN episode_actor ea 
    ON n.act_suragate_pk = ea.act_suragate_pk 
) ep_act 
ON ep_act.ep_suragate_pk = e.ep_suragate_pk; 
1

您使用的加入應選擇列。因此,嘗試:

SELECT e.ep_suragate_pk FROM episode e 
JOIN (
    SELECT n.name, ref_id FROM actor n 
    JOIN episode_actor ea 
    ON n.act_suragate_pk = ea.act_suragate_pk 
) ep_act 
ON ep_act.ref_id = e.ep_suragate_pk;