2016-04-18 25 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

这只是我的做法。非常感谢!这三个标记字段的缺省值为“无”,因为没有填充值。 –