在这里,我更简单地描述了我需要什么样的查询的问题:
考虑我有三个表AccessPolicy,Document和Term。这里AccessPolicy的名称和文档的名称都存储在“Term”表中。我需要从3个表中返回以下字段。我需要在一个选择查询中分别为AccessPolicy和Document两次获取Name字段。
Term.Name as AccessPolicyName
Term.Name as DocumentName
AccessPolicy.TermID
Document.TermID
Document.UserName
AccessPolicy.ValidFrom
如何形成一个选择查询以返回上述结果?
我需要在Oracle 11g中执行此操作。
答案 0 :(得分: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;
请注意,AccessPolicy和文档信息都可以为空
答案 1 :(得分:0)
你还没有说过这些表是如何相关的。据推测,TermID
和AccessPolicy
表中的Document
与Term
表中的条目相关,可能由名为ID
的列标识。但是我们不知道你是否期望两者中都有相同的TermID
- 因此只有一条Term
记录链接其他两个表。既然你把名字拉了两次我就没想过,但是没有迹象表明应该如何制作。
如果涉及两个TermID
值,则需要加入Term
两次,例如:
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