oracle-根据值类型重新排列列值

oracle-根据值类型重新排列列值,oracle,Oracle,我有三个oracle表: table_1: ID some_fields 121 xx 122 xx 123 xx 124 xx 125 xx create table table_1 as select 121 id ,'xx' some_fields from dual union select 122 id,'xx' some_fields from dual union select 123 id,'xx' some_fields

我有三个oracle表:

table_1:
ID   some_fields
121      xx
122      xx
123      xx
124      xx
125      xx

create table table_1 as
select 121 id ,'xx' some_fields from dual
union select 122 id,'xx' some_fields from dual
union select 123 id,'xx' some_fields from dual
union select 124 id,'xx' some_fields from dual
union select 125 id,'xx' some_fields from dual


table_2:
ID   some_fields
221      xx
222      xx
223      xx
224      xx
225      xx

create table table_2 as
select 221 id,'xx' some_fields from dual
union select 222 id,'xx 'some_fields from dual
union select 223 id,'xx' some_fields from dual
union select 224 id,'xx' some_fields from dual
union select 225 id,'xx' some_fields from dual

table3:
ID    field_1    field_2
1      121         221
2      222         125
3      225         124
4      123         223
5      122         224

create table table_3 as
select 1 id, 121 field_1,221 field_2 from dual
union select 2 id, 222 field_1,125 field_2 from dual
union select 3 id, 225 field_1,124 field_2 from dual
union select 4 id, 123 field_1,223 field_2 from dual
union select 5 id, 122 field_1,224 field_2 from dual
我需要重新安排表_3,使表_1的所有ID位于字段_1中,表_2的所有ID位于字段_2中,因为表_1和表_2中的ID是唯一的

ID    field_1    field_2
1      121         221
2      125         222
3      124         225
4      123         223
5      122         224
注意,实际上这些表包含数百万行。
我正在考虑创建一个视图,以满足我的需要,但不确定如何继续。

如果我正确理解了您的问题,那么根据您的示例,表_3中的列字段_1必须仅包含表_1中的列ID中的值。同样,表_3中的列字段_2必须仅包含表_2中的ID值

在示例数据中,列字段_1中有一些来自表_2的值,您希望更新表_3,以便表_3的列字段_1中只显示来自表_1的ID

如果上述解释正确,则以下SQL将修复该问题:

更新表3 设置字段_1=字段_2 ,字段_2=字段_1 如果不存在,则从表_1中选择1,其中表_1.ID=表_3.FIELD_1; 编辑 因为你的第一次

下面的SQL查询生成所需的结果

选择T3.ID ,从表_1 T1中选择T1.ID,其中T1.ID=T3.FIELD_1或T1.ID=T3.FIELD_2作为字段_1 ,从表2中选择T2.ID,其中T2.ID=T3.FIELD_2或T2.ID=T3.FIELD_1作为字段_2 来自表3 T3 编辑2 因为你的第二次

使用连接

选择T3.ID ,T1.ID为FLD_1 ,T2.ID为FLD_2 来自表3 T3 在T2.ID=T3.FIELD_1或T2.ID=T3.FIELD_2上联接表_2 T2 在T1.ID=T3.FIELD_1或T1.ID=T3.FIELD_2上联接表_1 T1
字段_1中表_1的所有ID和字段_2中表_2的所有ID是什么意思?您在这里表示的表1和表2之间的关系是什么?是_类型_1的id_=_类型_2的id_,还是表_1的每个id都与表_2的每个id相关联的笛卡尔关系?表_1和表_2之间没有关系。表_3包含表_1和表_2的值,我需要将它们排列成字段_1中属于表_1的所有值和字段_2中属于表_2的值。实际上,您正在创建与表_3的多对多关系。表_1中的哪个值应该与表_2中的哪个值位于同一行,或者一个表中的每个值应该映射到另一个表中的每个值?如果你能给出一个更具体的例子,用实际的数据值,让我们知道你想做什么,那会有帮助的。不,实际上我不是根据表1和表2的数据填充表3。表_3已经存在,并且包含字段_1和字段_2中的表_1和表_2中的值,我想按照我所述重新排列。您能否提供示例DDL和一些DML来填充表。这看起来像是一种奇怪的数据建模方法。我不想更新表_3,我只想创建一个具有所需结果的视图。但假设这3个表包含数百万条记录,您提供的查询将花费相当长的时间。如何才能以最快的速度获取所需的结果?我不认为堆栈溢出的作用是为您优化代码。如果你有进一步的问题,我认为最好在新提交的材料中提出。你现在说你认为它在没有任何事实的情况下会表现不佳@艾布拉回答了你的问题。请接受我的回答。