[ORACLE]如何使用内联视图获取外键值?
[ORACLE]How can I get the foreign key values using inline view?
我想做的是使用内联视图获取值。
在我的 table "mainBoard" 上有列 tgno1、tgno2、tgno3,它们是外键引用 table、"Tag"。
table "Tag" 只有两列 tgno(NUMBER), tgname(VARCHAR2).
我想要 return 使用内联视图从 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}
希望我的问题是可以理解的。提前谢谢你
您可以加入主板标记三次,每个外键关系在主板标记一次。为什么你必须有一个内联视图或者这只是你的方法?
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 个标签字段是否总是被填充,并且假设您想要所有主板,而不管 tagno 是否被填充到所有 3 个中。
我想做的是使用内联视图获取值。 在我的 table "mainBoard" 上有列 tgno1、tgno2、tgno3,它们是外键引用 table、"Tag"。 table "Tag" 只有两列 tgno(NUMBER), tgname(VARCHAR2).
我想要 return 使用内联视图从 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}
希望我的问题是可以理解的。提前谢谢你
您可以加入主板标记三次,每个外键关系在主板标记一次。为什么你必须有一个内联视图或者这只是你的方法?
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 个标签字段是否总是被填充,并且假设您想要所有主板,而不管 tagno 是否被填充到所有 3 个中。