如何加入不同表的相同命名列

时间:2011-06-08 07:22:29

标签: sql oracle oracle11g

在这里,我更简单地描述了我需要什么样的查询的问题:

考虑我有三个表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中执行此操作。

2 个答案:

答案 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)

你还没有说过这些表是如何相关的。据推测,TermIDAccessPolicy表中的DocumentTerm表中的条目相关,可能由名为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