如何编写Oracle查询

时间:2017-03-03 15:23:11

标签: oracle

我想用1部电话归还所有身份证(先工作。如果没有工作,那么回家。或空电话)

TALBE 1

ID   Name
01      ab
02      cd
03       ef 

表2

ID  phone type
01   1111   work
01   1234   Home
02   2345   home

2 个答案:

答案 0 :(得分:0)

你可以在table2上使用左连接两次,在

时使用case
select t1.id, t1.name, case when tb.phone is not null then tb.phone 
                            when ta.phone is not null then ta.phone 
                            else null 
                        end  phone
from table1 t1
left join table2 ta on t1.id = ta.id and ta.type = 'work'
left join table2 tb on t1.id= tb.id and tb.type = 'Home'

答案 1 :(得分:0)

这样的事情......请注意在子查询中使用ROW_NUMBER()按电话类型优先级排序行,并使用CASE表达式来分配这些优先级。外部连接条件中rn的条件;它必须位于外连接的ON子句中,<{1}}子句中的(将其置于WHERE子句中将撤消外部加入的角色。)

如果有人想要使用它们,我会加入WHERE语句。

注意 - OP在输入中同时包含CREATE TABLE'home';这说明了为什么手机类型应该存储在一个单独的小表中,'Home'应该指向那个小表,而不是允许table2列中的自由文本。

type
相关问题