oracle with as 弊端,oracle 多个with as

今天去面试,遇到一个问题。

题目是这样的:

表1:

SQL> select * from tb_data;

ID CODE1 CODE2

---------- ---------- ----------

1 1 2

2 2 1

3 2 3

4 3 1

5 4 2

6 5 3

已选择6行。

SQL>

表2:

SQL> select * from tb_code;

CODE DESCRIPTION

---------- --------------------

1 a

2 b

3 c

4 d

5 e

SQL>

要求显示成:

ID DESCRIPTION DESCRIPTION

---------- -------------------- --------------------

1 a b

2 b a

3 b c

4 c a

5 d b

6 e c

也就是把表1里的code翻译成表2里的description。

因为面试官就坐在旁边,以前没写过,也没怎么动脑筋去写。

现在回来后,就想了一下。可以用多个with as来解决。

WITH

T3 AS

(

SELECT T1.ID, T1.CODE1, T2.DESCRIPTION

FROM TB_DATA T1, TB_CODE T2

WHERE T1.CODE1 = T2.CODE

),

T4 AS

(

SELECT T1.ID, T1.CODE2, T2.DESCRIPTION

FROM TB_DATA T1, TB_CODE T2

WHERE T1.CODE2 = T2.CODE

)

SELECT T3.ID, T3.DESCRIPTION, T4.DESCRIPTION

FROM T3, T4

WHERE T3.ID = T4.ID

ORDER BY ID;

执行后:

SQL> WITH

2 T3 AS

3 (

4 SELECT T1.ID, T1.CODE1, T2.DESCRIPTION

5 FROM TB_DATA T1, TB_CODE T2

6 WHERE T1.CODE1 = T2.CODE

7 ),

8 T4 AS

9 (

10 SELECT T1.ID, T1.CODE2, T2.DESCRIPTION

11 FROM TB_DATA T1, TB_CODE T2

12 WHERE T1.CODE2 = T2.CODE

13 )

14 SELECT T3.ID, T3.DESCRIPTION, T4.DESCRIPTION

15 FROM T3, T4

16 WHERE T3.ID = T4.ID

17 ORDER BY ID;

ID DESCRIPTION DESCRIPTION

---------- -------------------- --------------------

1 a b

2 b a

3 b c

4 c a

5 d b

6 e c

已选择6行。

SQL>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值