簡體   English   中英

帶有Join的Oracle子查詢-如何引用子查詢列?

[英]Oracle subqueries with Join - how to refer to subquery column?

我有兩個表Project和Project_Property,從Project到Project_Property的一對多。 我正在嘗試使用子查詢通過Project獲取三個屬性並加入Project(示例中為“ Repo”)。 警告:我主要是一名SQL Server專家,所以我試圖將我知道的在SQL中有效的方法應用到Oracle中。

我這樣寫:

select s1.Repo, s1.Solution, p1.Project, a1.Assembly
from
(
    select p.name as "Repo", pp.value as "Solution"
    from project p join project_property pp on p.id=pp.project_id
    where pp.name='mssolutionname'
) s1 join
(
    select p.name as "Repo", pp.value as "Project"
    from project p join project_property pp on p.id=pp.project_id
    where pp.name='msprojectname'
) p1 on p1.Repo=s1.Repo join
(
    select p.name as "Repo", pp.value as "Assembly"
    from project p join project_property pp on p.id=pp.project_id
    where pp.name='msassemblyname'
) a1 on s1.Repo=a1.Repo;

但是當我運行它時,我得到:

ORA-00904: "S1"."REPO": invalid identifier

Oracle中這種類型的查詢是否有其他格式? 我如何在外部主查詢中引用在子查詢中選擇的值,尤其是在JOINing子查詢方面。 還是我只是錯過了一個錯字。 不會是第一次。

TIA。

如果使用雙引號別名化列,則列名將區分大小寫。 由於將p.name as "Repo"編碼p.name as "Repo" ,因此該列必須稱為si."Repo" 如果不使用雙引號( p.name as repo ),則可以不區分大小寫的方式引用它( si.reposi.Reposi.rEPo )。

好吧,因為您已經接受了前面的答案,所以建議您將sql更改為此。 這樣會更有表現力

select 
    p.name as Repo, 
    case when pp.name='mssolutionname' then pp.value else null end as Solution,
    case when pp.name='msprojectname' then pp.value else null end as Project,
    case when pp.name='msassemblyname' then pp.value else null end as Assembly
from 
    project p,
    project_property pp
where 
    p.id=pp.project_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM