Oracle SQL中的字符串匹配和表联接

大众汽车

我需要一些有关如何解决此问题的指导。

考虑以下3个表: 在此处输入图片说明

我在Oracle中继承了此数据集。我需要找到一种方法来将这3个表合并为一个表。为什么?合规性和欺诈检查。我们正在接受审核,我别无选择,只能遵守。

这些表是数百万条记录。6900万。700万,400万 如果我尝试通过使用contains或instr或like进行联接和搜索,我将创建笛卡尔联接(我认为),它将非常慢。

我该如何处理?如图所示,数据用方括号格式化。我已经考虑过将这些表放入pandas中并使用python来获取答案。

结果表如下所示: 在此处输入图片说明

帕特里克·h

我认为您的第一步将是以可用的格式获取膳食和团队表。使用这些怪异的串联列永远都不是容易或快速的。

做一些简单的像这样分割的ID在不同的行:

select trim(column_value) partner_id,
       team
  from teams,
       xmltable(('"' || replace(teams.concat_identifier_partner, ']',']","') || '"'))

给出这样的输出:

+------------+------+
| PARTNER_ID | TEAM |
+------------+------+
| [012345]   | Blue |
| [012346]   | Blue |
| [012347]   | Red  |
+------------+------+

然后,您可以将它们用作查询中的内联视图,或为每个视图创建一个新的临时表。临时表将允许您在新的ID列上为它们建立索引。

数据采用简单格式后,联接变得简单。

select people.identifier,
       people.name,
       formatted_teams.team,
       formatted_meals.meal
from people
join (select trim(column_value) partner_id,
              team
       from teams,
       xmltable(('"' || replace(teams.concat_identifier_partner, ']',']","') || '"')) ) formatted_teams
  on people.identifier = formatted_teams.partner_id
left join (select trim(column_value) plate_id,
            meal
       from meals,
       xmltable(('"' || replace(meals.concat_identifier_plate, ']',']","') || '"')) ) formatted_meals
  on people.identifier = formatted_meals.plate_id
order by people.identifier

输出:

+------------+--------+------+--------+
| IDENTIFIER |  NAME  | TEAM |  MEAL  |
+------------+--------+------+--------+
| [012345]   | George | Blue | Salmon |
| [012346]   | Jenny  | Blue |        |
| [012347]   | Alex   | Red  | Pike   |
| [012347]   | Alex   | Red  | Cod    |
+------------+--------+------+--------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章