将源数据分解为新的多对多模式

时间:2014-03-20 19:34:20

标签: sql ms-access ms-access-2010

我正在使用MS Access 2010进行一些数据转换。具体来说,我需要为concept(由rxnconso.rxcui汇总)和word(由drugwords.id汇总)之间的多对多关系创建数据结构。 drugwords.id的值需要与下图中name表的words的唯一值相对应。)。为此,我需要创建两个表drugwordsdrugwordsConsoJunction,并将现有表words的内容分解为drugwordsdrugwordsConsoJunction表。目标表的结构是:

drugwords table: (this table needs to be created)  
    id (autonumber pk needs to be created from distinct values of words.name)  
    name  
drugwordsConsoJunction: (this table needs to be created)  
    word_id (fk to drugwords.id)  
    rxcui (fk to rxnconso.rxcui)  
rxnconso (this table already exists):  
    rxcui  
    ...other fields  

此转换的源表名为words,有两列; rxcui的值和name的值。从下面的图片中可以看出,给定name值可能有很多rxcui个值。下面的第二张图显示了给定rxcui值可能有多个name值。

如何根据上述规范编写SQL以将单词转换为drugwords和drugwordsConsoJunction?

我已将数据库的副本上传到文件共享站点。您可以下载at this link

1 个答案:

答案 0 :(得分:2)

如果建议的[drugwords]表已经在其[name]列中具有唯一值,那么您不需要AutoNumber ID列,您只需将[name]字段用作主键即可。在这种情况下,映射"单词"只需执行

即可创建相应的[rxcui]值
SELECT DISTINCT rxcui, [name] INTO drugwordsConsoJunction FROM words

然后你就可以使用"单词"他们自己而不是从(不同的)"单词"引入另一层映射。到(不同的)" ID"。