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