我尝试做的是使用内联视图获取值。 在我的桌子上" 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}
希望我的问题是可以理解的。提前谢谢
答案 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。