2

Project と Project_Property の 2 つのテーブルがあり、Project から Project_Property まで 1 対多です。サブクエリを使用して Project ごとに 3 つのプロパティを取得し、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 でこのタイプのクエリに別の形式はありますか? 特にサブクエリの結合に関して、サブクエリで選択された値を外側のメインクエリで参照するにはどうすればよいですか。それとも、私が見逃したタイプミスがありますか?初めてではないでしょう。

ティア。

4

2 に答える 2

5

二重引用符を使用して列に別名を付けると、列名で大文字と小文字が区別されます。をコーディングp.name as "Repo"したため、列はとして参照する必要si."Repo"があります。二重引用符 ( p.name as repo) を省略した場合は、大文字と小文字を区別せずに参照できます ( si.reposi.Repo、またはsi.rEPo) 。

于 2013-10-21T12:01:35.683 に答える
0

あなたはすでに前の回答を受け入れているので、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
于 2013-10-21T12:20:09.703 に答える