2012-08-02 59 views
0

我:爲什麼我的加入給我太多的結果?

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.我只是想要ParamValue從前兩個連接的6條記錄,我似乎無法弄清楚爲什麼這會突破。我正在進行第12個小時的編碼工作,我確信這非常明顯,但我可以用一隻手。提前致謝。

+0

DataVariableDataSourceParamValue表的外觀如何? – dfb 2012-08-02 01:29:27

+0

向我們展示架構,至少對於'DataVariableDataSourceParamValue' – Bohemian 2012-08-02 01:41:10

回答

1

這將是因爲你有你的pv錶行大量匹配DataVariableDataSourceParamId

您可以驗證通過添加SELECT DISTINCT說。您可能需要清理該表格或保留不同的

但是,如果pv.ParamValue對所有人都是相同的,那麼這種區別只會有所幫助,否則您正確地獲得更多匹配,因爲發生的情況是您正在查找所有匹配爲DataVariableDataSourceParamId並顯示它們。如果所有這些匹配值都是相同的值,那麼區別確實會有所幫助,但

+0

您是對的。我不得不在連接上使用AND來獲得我想要的。編碼剛剛開始的第13個小時 - 思維不能滿負荷工作。 – Yatrix 2012-08-02 01:41:33

相關問題