SQL Server Join查询导致重复

时间:2017-01-11 16:20:52

标签: sql-server

我有一个查询,它将两个不同的表组合在一起,返回我需要的所有信息,但是它似乎正在重新创建具有相同数据的额外行,而我似乎无法弄明白。

我的查询:

SELECT 
    [key], [ctankid], [dbo].[tbltanks].[csiteid],
    [dbo].[jobdata].[jobname], [ctankname], [ctanknameabbr],
    [cshousepartid], [cshousemodel], [csfiltermodel], [ddatecreated]
FROM 
    [sensordb].[dbo].[tbltanks]
JOIN
    jobdata ON [dbo].[tbltanks].[csiteid] = [dbo].[jobdata].[csiteid] 
WHERE
    cshousemodel IS NULL 
    AND csfiltermodel IS NULL
    AND ddatecreated > '2010-01-01'
ORDER BY 
    ddatecreated DESC

结果:

Query results

1 个答案:

答案 0 :(得分:0)

你所拥有的是你有一对多关系的情况。因此,子表中有多个记录。

现在的问题是如何确定选择哪条记录。这是一项商业规则,我们无法正确回答。但是,我可以提出一些建议。

首先,是否有一些字段未被返回导致返回两条记录?如果是这样,那么DISTINCT应该解决问题。请注意,distinct不一定是快速解决方案。如果使用distinct存在性能问题,则可能需要考虑使用where子句来限制记录。

如果多个记录对于返回的一个或多个字段具有不同的值,则它们不一定是重复的。可能需要返回两个记录,或者可能需要在查询中添加where子句以将子表中的记录限制为所需的记录。例如,如果您要查询地址,则可能需要选择特定的地址类型,以便只获得一条记录。 where子句可能是一个只能来自您的业务需求的业务规则。

另一种可能性是您需要聚合一个或多个字段的值。因此GROUP BY和聚合函数可能就是您所需要的。同样,这取决于您的特定业务规则。