Sql 使用内部联接时获得重复结果

Sql 使用内部联接时获得重复结果,sql,ms-access,join,Sql,Ms Access,Join,我有三张桌子。一个有用户名,一个有一堆数据,然后一个通过ID将两个表链接在一起。当我尝试用一个内部连接连接3时,会得到一堆重复的行。例如,如果数据表只有2000行,那么一旦我尝试使用内部联接连接这3个表,就会得到一个显示100000行的输出。这是否与我的数据表比我的用户名表有更多的行,并且内部联接不能很好地发挥作用有关?是否可以将一个表的行数比另一个多的表进行内部联接 编辑以获得清晰性 对于此数据库,我导入的数据如下所示: -Names-----------Numbers-----------I

我有三张桌子。一个有用户名,一个有一堆数据,然后一个通过ID将两个表链接在一起。当我尝试用一个内部连接连接3时,会得到一堆重复的行。例如,如果数据表只有2000行,那么一旦我尝试使用内部联接连接这3个表,就会得到一个显示100000行的输出。这是否与我的数据表比我的用户名表有更多的行,并且内部联接不能很好地发挥作用有关?是否可以将一个表的行数比另一个多的表进行内部联接

编辑以获得清晰性

对于此数据库,我导入的数据如下所示:

-Names-----------Numbers-----------Item---------------Cost---
John Smith       111-1111          Pencils           100.75  
Joe Stevens      222-2222          Paper             35.34  
Mike Jones       333-3333          Staples           23.86
John Smith       111-1111          Boxes             11.76
-Names-----------Numbers-----------Item---------------Cost---
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75  
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75  
Joe Stevens      222-2222          Paper             35.34 
Joe Stevens      222-2222          Paper             35.34
Joe Stevens      222-2222          Paper             35.34
Joe Stevens      222-2222          Paper             35.34 
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
正如您所见,John Smith列出了两次,分别是两个单独的项目。我想对此进行优化,但只需一次迭代即可分离原始数据并将其放入自己的表中

  ID---Name---           ID----Numbers            ID---Items------Cost
  1    John Smith        1    111-1111            1    Pencil     100.75
  2    Joe Stevens       2    222-2222            2    Paper      35.34
  3    Mike Jones        3    333-3333            3    Staples    23.86
                                                  4    Boxes      11.76
现在事情已经优化了,我仍然需要能够运行一个查询,可以将John Smith与铅笔和盒子匹配起来。这就是为什么我创建了一个链接表,以正确的顺序保存ID

          Name.ID           Number.ID        Item.ID
            1                  1                1
            2                  2                2 
            3                  3                3
            1                  1                4
现在,如果我想运行一个重新创建原始数据转储的报告,我将运行一个查询,只使用内部联接联接这3个表。但问题是,我得到的结果是大量的重复数据,而不是简单地按原样输出数据。我得到这样的东西:

-Names-----------Numbers-----------Item---------------Cost---
John Smith       111-1111          Pencils           100.75  
Joe Stevens      222-2222          Paper             35.34  
Mike Jones       333-3333          Staples           23.86
John Smith       111-1111          Boxes             11.76
-Names-----------Numbers-----------Item---------------Cost---
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75  
John Smith       111-1111          Pencils           100.75 
John Smith       111-1111          Pencils           100.75  
Joe Stevens      222-2222          Paper             35.34 
Joe Stevens      222-2222          Paper             35.34
Joe Stevens      222-2222          Paper             35.34
Joe Stevens      222-2222          Paper             35.34 
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
Mike Jones       333-3333          Staples           23.86
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
John Smith       111-1111          Boxes             11.76
所需的输出仅为:

-Names-----------Numbers-----------Item---------------Cost---
John Smith       111-1111          Pencils           100.75  
Joe Stevens      222-2222          Paper             35.34  
Mike Jones       333-3333          Staples           23.86
John Smith       111-1111          Boxes             11.76
试试这个

Select Distinct t1.Names,t2.Number,t3.Item,t3.Cost
From  
tableName t1  
inner join tableNum t2  
on t1.ID = t2.ID  
inner join tableItem t3  
on t1.ID = t3.ID

你好像有一张连接桌。连接表被设计成允许一个数字或记录与另一些记录相关联,因此两个名称可以有十个数据,每个数据等于2×10个记录。HMM,所以你是说,不是把事物连接在一起,而是它们被相乘?不,我是说每个名字有效地有不止一个数据。“请选择您喜欢的所有颜色。”“是的。我有一块导入的数据,它在每一列中包含许多重复的条目。因此,我将内容划分到不同的表中,并且只创建每个记录的一个版本。Username表中每个名称只有一个版本,依此类推。当我运行查询时,如果需要,我需要能够“重新创建”原始数据转储,将重复的用户名与其对应的数据链接起来。这就是我为什么使用连接表的原因。不知道这是否能让事情变得更清楚,哈哈?很抱歉,使用DISTINCT来掩盖数据库设计中的问题不是一个好主意。这不会在MS Access中运行。@python_新手在获取重复项时,这是有原因的,如果不调查原因而只使用DISTINCT,则查询速度会变慢,将来可能会出现主数据的其他问题。