【Oracle】建立关联三个表的视图

一、背景

在我们的业务中,经常会有这样的需求:将某对象集合以列表的形式展示,但被展示的对象信息可能来自多个表,这时候,我们为了减少在系统对数据的处理,提高查询速度,会通过建立视图来解决这类问题。

二、具体代码

关联的三个表为:T_A,T_B,T_C

CREATE VIEW V_AGREEMENT_INFO AS SELECT
	ID,
	ORG_ID,
	ID AS PRJ_ID,
	PRJ_NAME,
	(
		(
			SELECT
				TASK_AGREEMENT_NO
			FROM
				T_B
			WHERE
				T_B.PRJ_ID = T_A. ID
		)
	) AS CONTRACT_NO,
	'TASK' AS CONTRACT_TYPE,
	PRJ_NAME AS CONTRACT_NAME
FROM
	T_A
UNION
	SELECT
		ID,
		ORG_ID,
		PRJ_ID,
		(
			SELECT
				PRJ_NAME
			FROM
				T_A
			WHERE
				T_C.PRJ_ID = T_A. ID
		) AS PRJ_NAME,
		CONTRACT_NO,
		CONTRACT_TYPE,
		CONTRACT_NAME
	FROM
		T_C

三、注意

1、在建立视图之前,先确定页面需要的展示具体的字段,以及该字段具体来着那张表;

2、确定该视图主要来自哪几张表的信息;

3、某字段信息需要展示在页面上,但在第一个表中没用有,只有第二个表有。该字段信息如果是默认为某个值,可以这样写:

'TASK' AS CONTRACT_TYPE

如果该字段的信息是从关联的别的表查询而来,可以这样写:

(SELECT PRJ_NAME FROM T_PM_PRJ_INFO WHERE T_PM_OTHER_CONTR_INFO.PRJ_ID = T_PM_PRJ_INFO.ID) AS PRJ_NAME

AS前的select语句要加括号,相当于,以查询到的某条信息的值做该字段的值。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王师傅66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值