为什么我收到这么多的记录
SELECT e.OneColumn, fb.OtherColumn
FROM dbo.TABLEA FB
INNER JOIN dbo.TABLEB eo ON Fb.Primary = eo.foregin
INNER JOIN dbo.TABLEC e ON eo.Primary =e.Foreign
WHERE FB.SomeOtherColumn = 0
当我运行这个时,我收到的数百万条记录不是正确的情况,所有表的记录数都较少。
我需要从TableA和TableC获取列,因为它们没有逻辑连接所以我必须使用TableB作为桥接
修改
以下是计数:
TABLEA = 273551
TABLEB = 384412
TABKEC = 13046
以上查询= 2分钟后我强行取消了查询..直到那个时候计数 11437613
有什么建议吗?
答案 0 :(得分:1)
为了弄清楚在这样的查询中发生了什么,结果不是预期的,我倾向于这样做。首先我改为SELECT *(注意这只是为了解决问题,不要在生产中使用SELECT *!)如果查询中没有一个,我会从tableA为ID frield添加一个order by。
所以现在我将查询运行到第一个表,包括来自第一个表的任何条件。我评论其余的。我注意到返回的记录数。
现在我添加第二个表以及其中的任何条件。如果我期待一个关系,如果这个查询没有返回多少记录,那么我查看正在返回的数据,看看我是否能找出原因。由于内容是按table1 ID排序的,因此您可以通常看到一些相当容易重复的记录示例,然后滚动直到找到导致差异的字段。通常这意味着您需要某种addtional where子句或聚合在下一个表中的字段,以限制只有一个记录。 JUSt此时记下了问题,因为您可以在下一次加入时更有效地进行更改。
因此,再次添加第三个表,而不是记录数,然后仔细查看重复来自A的id的数据。在你打算返回的栏目中,他们总是和同一个人一样吗?如果它们不同,那么你就没有一对一的关系,你需要明白,这是一个数据完整性问题,或者你错误地认为存在一对一的关系。如果tehy是相同的,那么派生表可能是有序的。你只需要来自tableb的id,所以连接看起来像这样:
JOIN (SELECT MIn(Primary), foreign FROM TABLEB GROUP BY foreign) EO ON Fb.Primary = eo.foreign
希望这有帮助。