我有一个查询,它将两个不同的表组合在一起,返回我需要的所有信息,但是它似乎正在重新创建具有相同数据的额外行,而我似乎无法弄明白。
我的查询:
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
结果:
答案 0 :(得分:0)
你所拥有的是你有一对多关系的情况。因此,子表中有多个记录。
现在的问题是如何确定选择哪条记录。这是一项商业规则,我们无法正确回答。但是,我可以提出一些建议。
首先,是否有一些字段未被返回导致返回两条记录?如果是这样,那么DISTINCT应该解决问题。请注意,distinct不一定是快速解决方案。如果使用distinct存在性能问题,则可能需要考虑使用where子句来限制记录。
如果多个记录对于返回的一个或多个字段具有不同的值,则它们不一定是重复的。可能需要返回两个记录,或者可能需要在查询中添加where子句以将子表中的记录限制为所需的记录。例如,如果您要查询地址,则可能需要选择特定的地址类型,以便只获得一条记录。 where子句可能是一个只能来自您的业务需求的业务规则。
另一种可能性是您需要聚合一个或多个字段的值。因此GROUP BY和聚合函数可能就是您所需要的。同样,这取决于您的特定业务规则。