Sql MS ACCESS 2010-尝试编写查询以避免链接表中的重复

Sql MS ACCESS 2010-尝试编写查询以避免链接表中的重复,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,这是我的第一个问题,所以我会非常彻底。请容忍我 我正在为啤酒建立一个数据库,并创建了一个链接表,允许我根据口味或其他质量建议类似的啤酒。原始表使用beerID作为主键,在链接表中,我通过在beerID中加载两次,从外键beerID1和beerID2创建了一个复合主键。到目前为止,它运行良好,但当我选择: beerID1=德丘特IPA,beerID2=流氓IPA -然后在另一排- beerID1=流氓IPA,beerID2=德丘特IPA 正如您所看到的,我有一个重复数据的问题,而且我对SQL不太熟

这是我的第一个问题,所以我会非常彻底。请容忍我

我正在为啤酒建立一个数据库,并创建了一个链接表,允许我根据口味或其他质量建议类似的啤酒。原始表使用beerID作为主键,在链接表中,我通过在beerID中加载两次,从外键beerID1和beerID2创建了一个复合主键。到目前为止,它运行良好,但当我选择:

beerID1=德丘特IPA,beerID2=流氓IPA

-然后在另一排-

beerID1=流氓IPA,beerID2=德丘特IPA


正如您所看到的,我有一个重复数据的问题,而且我对SQL不太熟悉,无法深入了解如何解决这个问题。有外行可以使用的想法吗?我在考虑某种形式的验证或查询。。。但似乎不能走得太远。

实际上,您希望将其正常化一点。退房

我认为你正在做的是:

Beer
BeerID  BeerName  BeerManufacturer
------  --------  ----------------
1       Beer1     Brewer 1
2       Beer2     Brewer 1
3       Beer3     Brewer 2
4       Beer4     Brewer 3

AltBeer
AltBeerID  BeerID  BeerID1  BeerID2  BeerID3
---------  ------  -------  -------  -------
1          1       3        4
2          2       5
3          4       7
相反,您只希望有一列啤酒供您选择。在这种情况下,AltBeer将成为

AltBeer
AltBeerID  BeerID  AltBeer
---------  ------  -------
1          1       3        
1          1       4        
2          2       5
3          4       7
然后在BeerID的基础上加入Beer和AltBeer,将为您提供与原始啤酒类似的BeerID列表。你可以在BeerID和AltBeer的基础上再次加入啤酒,以了解替代啤酒的细节

SELECT beer.beermanufacturer,
       beer.beername,
       beer_1.beername         AS recbeer,
       beer_1.beermanufacturer AS recbeerman
FROM   (altbeer
       INNER JOIN beer
         ON altbeer.beerid = beer.beerid)
       INNER JOIN beer AS beer_1
         ON altbeer.altbeer = beer_1.beerid;  
结果是这样的没有重复,保证

BeerName    BeerManufacturer   RecBeer     RecBeerMan
--------    ----------------   -------     -----------
Beer1       BeerMan1           Beer3       BeerMan2
Beer1       BeerMan1           Beer4       BeerMan3
当然,如果我们把这一切都正常化了,我们也将啤酒制造商分成了自己的表格,因为啤酒和制造商之间存在着多对一的关系