2016-04-18 19 views
0

私がしようとしているのは、インラインビューを使用して値を取得することです。 私のテーブルの "mainBoard"には、テーブル "タグ"を参照する外部キーであるtgno1、tgno2、tgno3という列があります。 テーブル「タグ」には、tgno(NUMBER)、tgname(VARCHAR2)の2つの列しかありません。[ORACLE]インラインビューを使用して外部キー値を取得するにはどうすればよいですか?

インライン・ビューを使用して、tgno(NUMBER)からtgname(VARCHAR2)に値を戻したいとします。最終的な目標はここで、tgname値の値の代わりを得ることです

SELECT tag1, tag2, tag3 
FROM (SELECT...) 

:私はのようにすべての3つの値を取得したい

SELECT tag1 
FROM (SELECT tgname as tag1 
FROM (SELECT tgname FROM tag WHERE tgno=1)); 

:ここ

は、私は一つの値だけのためにしようとしたものですtgno1,2,3ベロー:

SELECT bno,bsubject,mno,bdate,bhit,bvote,tgno1,tgno2,tgno3,num 
    FROM (SELECT bno,bsubject,mno,bdate,bhit,bvote,tgno1,tgno2,tgno3,rownum as num 
    FROM (SELECT bno,bsubject,mno,bdate,bhit,bvote,tgno1,tgno2,tgno3 
    FROM mainBoard WHERE btno=1 ORDER BY bno DESC)) 
    WHERE num BETWEEN #{start} AND #{end} 

私の質問は分かりやすいと思っています。事前にありがとう

+0

なぜ参加していないに移入されている場合は関係なく、すべてのマザーボードを望んでいたと仮定している場合、私は知らないように、左の結合に使用メインボードは、各列に1回、3回タグを付けますか? – xQbert

+0

ありがとう、簡単な道があった.. –

答えて

0

メインボードに参加して、外部キーとの関係ごとに3回タグ付けして、メインボードにタグを付けることができます。なぜあなたはインラインビューを持っている必要がありますか、それともあなたのアプローチですか?

SELECT MB.*, T1.tgName as Tag1Name, T2.tgName as Tag1Name, T3.tgName as Tag1Name 
FROM mainboard MB 
LEFT JOIN tag t1 
on T1.tgno = mb.tgno1 
LEFT JOIN tag t2 
on T2.tgno2 = mb.tgno1 
LEFT JOIN tag t3 
on T3.tgno3 = mb.tgno1 
WHERE MB.num BETWEEN #{start} AND #{end} 

私はマザーボードのすべての3つのタグフィールドは常に人口とtagnoは全て3

+0

それは私のアプローチだった。どうもありがとうございます!これら3つのタグフィールドには、値が入力されていない場合のデフォルト値「none」があります。 –