Sql 重复值​当连接3个表时

Sql 重复值​当连接3个表时,sql,sql-server,Sql,Sql Server,最初我有以下三张表: 数据1: 数据2: 数据3: 我需要获取data1和ext列,因此我尝试在data1和data2之间进行内部连接,然后是data2和data3,从而删除元素。问题是它提取了额外的值​​从我这里 SELECT d1.PK_data1, d2.PK_data2, d3.ext FROM data1 d1 JOIN data2 d2 ON d1.PK_data1 = d2.data1 JOIN data3 d3 ON d2.PK_data2 = d3.data2 但是这个查询

最初我有以下三张表:

数据1:

数据2:

数据3:

我需要获取data1和ext列,因此我尝试在data1和data2之间进行内部连接,然后是data2和data3,从而删除元素。问题是它提取了额外的值​​从我这里

SELECT  d1.PK_data1, d2.PK_data2, d3.ext
FROM data1 d1
JOIN data2 d2 ON d1.PK_data1 = d2.data1
JOIN data3 d3 ON d2.PK_data2 = d3.data2

但是这个查询返回不应该存在的额外数据。我怀疑,由于连接同时运行,因此所有表之间的关系都不正确。我想我应该把数据3和数据1联系起来


非常感谢您的帮助。

由于您的联接位于具有主键列的data1/data2列上,除非数据列是唯一的,否则您可能会看到重复/多条记录。简单的解决方案将是一个独特的解决方案,但它可能会产生有害的影响。如果希望联接列在data2和data3中只有唯一的值,则可以在这些列上指定唯一约束,这将是最佳选项。

如果表之间的关系不是一对一,则此查询可以为data1中的一行返回多行。如果您只需要data1和ext的唯一组合,请尝试从data1 d1中选择d1.PK_data1,d3.ext在d1.PK_data1=d2上选择JOIN data2 d2。在d2.PK_data2=d3.data2组中选择d1.PK_data1,d3.ext。我怀疑,由于连接同时运行,因此在所有表之间建立了一个不正确的关系。-当然不是,请展示一些样本数据和预期结果,因为我们不知道是什么给我带来了不应该存在的额外数据。人们在使用联接时遇到的常见问题是,由于超过1条记录与条件匹配,因此会获得多行。
PK_data2
data1
PK_data3
data2
ext
SELECT  d1.PK_data1, d2.PK_data2, d3.ext
FROM data1 d1
JOIN data2 d2 ON d1.PK_data1 = d2.data1
JOIN data3 d3 ON d2.PK_data2 = d3.data2