【问题标题】:[ORACLE]How can I get the foreign key values using inline view?[ORACLE]如何使用内联视图获取外键值?
【发布时间】:2016-04-18 13:17:09
【问题描述】:

我想要做的是使用内联视图获取值。 在我的表“mainBoard”上有列 tgno1、tgno2、tgno3,它们是外键引用表“Tag”。 表“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}

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

【问题讨论】:

  • 为什么不加入主板标记3次,每列一次?
  • 谢谢,有简单的方法..

标签: mysql database oracle mybatis


【解决方案1】:

您可以加入主板标记三次,每个外键关系标记在主板中。为什么你必须有一个内联视图或者这只是你的方法?

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。

【讨论】:

  • 这只是我的方法。太感谢了!当没有填充值时,这三个标签字段的默认值是“none”。
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2011-04-19
  • 2018-02-27
  • 2014-12-18
相关资源
最近更新 更多