2016-04-18 23 views
0

我想要做的是使用內聯視圖獲取值。我的桌子上的 「mainBoard」有列tgno1,tgno2,tgno3,它們是外鍵引用表「Tag」。 表「標記」只有兩列tgno(NUMBER),tgname(VARCHAR2)。[ORACLE]如何使用內聯視圖獲取外鍵值?

我想使用內聯視圖從tgno(NUMBER)返回tgname(VARCHAR2)的值。

這裏就是我想只有一個值:

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

我想獲得的所有三個值,如:

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

的最終目標是讓tgname的值,而不是tgno1,3,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

填充爲什麼不加入的主板要標記3次,每列一次? – xQbert

+0

謝謝,有簡單的方法.. –

回答

0

您可以加入主板,爲主鍵盤上的每個外鍵關係標記一次。爲什麼你必須有內聯視圖或者只是你的方法?

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

這只是我的做法。非常感謝!這三個標記字段的缺省值爲「無」,因爲沒有填充值。 –