Oracle查询来链接映射到映射表的同一个表中的记录

时间:2015-06-19 18:37:30

标签: sql database oracle

为可怕的问题标题道歉,不知道如何更好地表达它。

所以要开始。

**Table Dummy_Table**
id      description     filter_key
 1      Test Record1    filterkey1
 2      Test Record2    filterkey1
 3      Test Record1    filterkey2
 4      Test Record2    filterkey2

The records with filterkey1 map to a table like this

**Table Mapping_table**
Dummy_Table_id   someother_key (one(Dummy_Table_id) to many(someother_key)
  1                  x
  1                  y
  1                  z
  1                  r
  2                  y
  2                  r

现在:在查询中,我使用描述在Dummy_Table中将id映射到彼此,所以我最终得到这样的结果集

id_for_filter_key1         id_for_filterkey2
      1                          3
      2                          4

好的,这一切都很好,这是下一步我遇到问题。我需要将记录添加到 Table Mapping_table ,这应该看起来像此

**Table Mapping_table**
 Dummy_Table_id   someother_key
      3                x
      3                y
      3                z
      3                r
      4                y
      4                r

因此,无论id为filterKey1,我都希望将它的someother_key应用于带有filterkey2的id(filterKey1和filterkey2相互关联及其描述)

现在我不知道我是否过于复杂。我会告诉你我的问题是什么。

我在数据库中有filterkey1的记录映射到映射表。之后我用filterkey2添加了记录。这些行只是与另一个过滤键重复。现在我需要使用filterkey2将相同的映射应用于记录< / p>

更改表结构不是atm的选项。我需要为DBA提供一个插入查询来实现此目的。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

此查询提供缺失值:

SELECT d.id_for_filterkey2, m.someother_key
FROM Mapping_table m
JOIN Dummy_Table d ON m.Dummy_Table_id = d.id_for_filter_key1

演示:http://sqlfiddle.com/#!4/61ddfe/2

当我们缺少值时,我们可以将它们合并到Mapping_table:

MERGE INTO Mapping_table m
USING(  copy-the-above-query-and-paste-it-here) x
ON (x.id_for_filterkey2 = m.Dummy_Table_id)
WHEN NOT MATCHED THEN 
INSERT( Dummy_Table_id,   someother_key ) 
VALUES( x.id_for_filterkey2, x.someother_key );

演示:http://sqlfiddle.com/#!4/d74304/3