2011-06-08 62 views
0

這裏的同名欄目我描述了我的問題更簡單的是什麼樣的查詢,我需要:如何加入不同的表

想想看,我有三個表AccessPolicy,文檔和期限。這裏AccessPolicy的名稱和文檔的名稱都存儲在「Term」表中。我需要從3個表中返回以下字段。我需要在單個select查詢中分別爲AccessPolicy和Document獲取名稱字段兩次。

Term.Name as AccessPolicyName 
Term.Name as DocumentName 
AccessPolicy.TermID 
Document.TermID 
Document.UserName 
AccessPolicy.ValidFrom 

如何形成select查詢返回上述結果?

我需要在Oracle 11g中做到這一點。

回答

0

你還沒有說的表是如何相關的兩個AccessPolicy和文檔信息可以爲空。據推測,AccessPolicyDocument表中的TermIDTerm表中的條目相關,可能由名爲ID的列標識。但是我們不知道你是否期待兩者都有相同的TermID--所以有一個連接另外兩個表的Term記錄。既然你拉了這個名字兩次,我本以爲沒有,但是沒有跡象表明如何加入應該是

如果有涉及,那麼你需要加入到Term二乘二TermID值,是這樣的:

select t1.Name as AccessPolicyName, 
    t2.Name as DocumentName, 
    ap.TermID as AccessPolicyTermID, 
    d.TermID as DocumentTermID, 
    d.UserName, 
    ap.ValidFrom 
from AccessPolicy ap 
join Term t1 on t1.ID = ap.TermID 
join Document d on d.someColumn = ap.someColumn -- don't know how policy and document are related? 
join Term t2 on t2.ID = d.TermID 
+0

嗨,亞歷克斯,是的,你猜對了。我有不同的TermId AccessPolicy和文檔鏈接到術語表。我可以根據您的設計獲得理想的結果。此外,文檔和AccessPolicy通過DocumentID鏈接。謝謝你的幫助。 – saravana 2011-06-09 13:04:51

1
select 
    Term.Name as AccessPolicyName, 
    Term.Name as DocumentName, 
    AccessPolicy.TermID, 
    Document.TermID, 
    Document.UserName, 
    AccessPolicy.ValidFrom 
from Term t 
left join AccessPolicy ap on ap.Name = t.Name 
left join Document d on d.Name = t.Name; 

注意

+0

您需要使用別名在列引用中選擇,或者它會拋出ORA- 00904。 't.Name','ap.TermID'等。 – 2011-06-08 13:21:24