我有两张复杂的table。但它们的Map是这样的:
表a:
_________________________________
| LINK_ID | TYPE_ID |
_________________________________
| adfasdnf23454 | TYPE 1 |
| 43fsdfsdcxsh7 | TYPE 1 |
| dfkng037sdfbd | TYPE 1 |
| sd09734fdfhsf | TYPE 2 |
| khsadf94u5dfc | TYPE 2 |
| piukvih66wfa8 | TYPE 3 |
_________________________________
表b:
_____________________________________________
| LINK_ID | CODE_ID | CODE_VALUE |
_____________________________________________
| adfasdnf23454 | 7 | test 1 |
| fgubk65esdfj7 | 6 | test 2 |
| ooogfsg354fds | 7 | test 3 |
| sd09734fdfhsf | 5 | test 4 |
_____________________________________________
link\u id列链接这两个表。
我的要求是检查表a中的所有记录是否有特定的代码id。
如果记录的code\ id为7,则在列中填充code\值。
如果记录的code\ id为6,则在另一列中填充code\值。
如果记录没有code\u id,则将code\u值显示为null。
关键是,表\u b可能有表\u a没有的记录。但最终结果应该只包含表a的记录。
ps:不建议使用switch case,因为我需要同一行中的字段(请参阅使用switch case时获得的结果中相同链接的多行(id)
获得的结果:
_______________________________________________
| LINK_ID | CODE_VALUE_1 | CODE_VALUE_1 |
_______________________________________________
| adfasdnf23454 | test 1 | null |
| adfasdnf23454 | null | test 4 |
| sd09734fdfhsf | test 6 | null |
_______________________________________________
预期结果:
__________________________________________________
| LINK_ID | CODE_VALUE_1 | CODE_VALUE_2 |
__________________________________________________
| adfasdnf23454 | test 1 | test 4 |
| 43fsdfsdcxsh7 | null | null |
| dfkng037sdfbd | null | null |
| sd09734fdfhsf | test 6 | null |
| khsadf94u5dfc | null | null |
| piukvih66wfa8 | null | null |
__________________________________________________
有人能帮忙吗?
2条答案
按热度按时间jaxagkaj1#
一个选项使用两个相关的子查询:
请注意,这假设没有重复
(link_id, code_id)
在table_b
. 你也可以用两个left join
这是完全相同的逻辑。另一个解决方案是单一
left join
,然后是条件聚合:uqxowvwt2#
问题的一部分是,如果b中的两个条目具有相同的链接id和类型id,该怎么办。您可以使用min、max和last条目(但为此您需要b中的排序列)。或者您可以列出它们:
数据:
结果:
D小提琴