[ORACLE]如何使用内联视图获取外键值?

时间:2016-04-18 13:17:10

标签: mysql database oracle mybatis

我尝试做的是使用内联视图获取值。 在我的桌子上" mainBoard"列有tgno1,tgno2,tgno3,这些是外键引用表," Tag"。 表"标记"只有两列tgno(NUMBER),tgname(VARCHAR2)。

我想使用内联视图将值从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,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}

希望我的问题是可以理解的。提前谢谢

1 个答案:

答案 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}

我使用左连接,因为我不知道MainBoard中的所有3个标记字段是否总是被填充并且假设您想要所有主板,无论是否所有3都填充了tagno。