【问题标题】:Why is my join giving me way too many results?为什么我的加入给了我太多的结果?
【发布时间】:2012-07-30 23:21:35
【问题描述】:

我有:

  SELECT  dv.VariableID ,
            ds.DataSourceID ,
            p.DataVariableDataSourceParamId ,
            p.ParamCode ,
            p.ParamDisplayName ,
            p.DVDSParamControlType ,
            p.DependentOnDVDSParamId ,
            pv.ParamValue
    FROM    dbo.DataVariable dv
            INNER JOIN dbo.DataVariableDataSource ds ON dv.DataSourceId = ds.DataSourceID
            INNER JOIN dbo.DataVariableDataSourceParam p ON ds.DataSourceID = p.DataSourceId
            INNER JOIN dbo.DataVariableDataSourceParamValue pv ON p.DataVariableDataSourceParamId = pv.DataVariableDataSourceParamId
    WHERE   dv.VariableID = @vid
    ORDER BY dv.VariableID

当我只有前两个连接时,我得到了我想要的:6 个结果。当我添加第三个时,我得到 660。我只想要前 2 个连接中的 6 条记录的 ParamValue,我似乎无法弄清楚为什么会出现这种情况。我正在编写第 12 个小时的代码,我确信这非常明显,但我可以用手。提前致谢。

【问题讨论】:

  • DataVariableDataSourceParamValue 表是什么样的?
  • 向我们展示架构,至少对于DataVariableDataSourceParamValue

标签: sql sql-server-2005 join


【解决方案1】:

这是因为您的pv 表中有许多行与DataVariableDataSourceParamId 匹配

您可以通过添加SELECT DISTINCT 进行验证。您可能需要清理该表或保留不同的

但是,只有当 pv.ParamValue 对所有人都相同时, distinct 才会有所帮助,否则您将理所当然地获得更多匹配项,因为您正在查找 DataVariableDataSourceParamId 的所有匹配项并显示它们。如果所有这些匹配项都是相同的值,那么 distinct 确实会有所帮助

【讨论】:

  • 你是对的。我必须在连接上使用 AND 才能得到我想要的。第 13 小时的编码刚刚开始 - 大脑还没有完全发挥作用。
猜你喜欢
  • 2018-03-13
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 2016-02-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多