我想用1部电话归还所有身份证(先工作。如果没有工作,那么回家。或空电话)
TALBE 1
ID Name
01 ab
02 cd
03 ef
表2
ID phone type
01 1111 work
01 1234 Home
02 2345 home
答案 0 :(得分:0)
你可以在table2上使用左连接两次,在
时使用caseselect 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