2017-03-28 60 views
-1

我有3個表。爲什麼我的查詢返回的重複記錄?

Complaints, Categories, SubCategories 

分類的主鍵是在投訴表外即CAT_ID

分類表的主鍵是國外的子類別,即CATEGORY_ID

當我加入與類投訴然後正常工作,即獨特的行但是當我加入SubCategories時,它會重複每條記錄。我試過左,右,內,但沒有任何作用。

Select * 
     From dbo.Complaints Comp 
     inner Join Categories Cat 
     ON cat.CategoryID= Comp.Cat_ID 
     inner join SubCategories scat 
     ON scat.Category_ID= cat.CategoryID 

小類:

enter image description here

分類:

enter image description here

輸出:

enter image description here

投訴表:

enter image description here

+0

這裏猜測,但你確定加盟最後一次連接中的列是否正確?我認爲像這樣的東西可能會工作'ON scat.Category_ID = cat.SubcategoryID' – Mihai

+0

不,bcz類別的主鍵是外部的子類別不是相反的 – Covert

+0

如果有多個投訴和子類別,那麼它會顯示多個,你能添加數據和預期的結果嗎? – Anil

回答

1

你有沒有嘗試檢查行是真正獨特的?我和表一次工作與幾個行和我有類似的東西到你的問題,因爲該行是不是唯一的。這是,這是不同的

0

需要在投訴表中插入SubCategoryId那麼它會作爲您的願望出來放一列。而就這一點,你需要改變你的查詢

Select * 
     From dbo.Complaints Comp 
     inner join SubCategories scat 
     ON scat.SubCategoryId= Comp.SubCategoryId 
     inner Join Categories Cat 
     ON cat.CategoryID= scat.CategoryID 
1

基地我想你想左連接到子類別和使用包含在投訴表中的子類別的信息:

SELECT * 
FROM dbo.Complaints Comp 
INNER JOIN Categories Cat 
    ON cat.CategoryID = Comp.Cat_ID 
LEFT JOIN SubCategories scat 
    ON scat.Category_ID = cat.CategoryID 
     AND scat.SubCategoryID = Comp.SubCat_ID 

(I」也可爲d建議使用null真是讓人不是0 s到代表no subcategory,這是我承擔0的立場爲)

0

如果不甲肝在投訴表E的子類別ID那麼就沒有任何的方法來確定應該使用哪個子類別。因此,您可以獲取每個類別的所有子類別。它是重複的來源。

添加SubCat_Id的投訴表,並在這一領域的子類別加入。

0

其原因是,你必須與類別8子類別= 1,所以當你加入由投訴(值= 1)中獲得的類別的子類別你加入所有的8個可能的值

在這種情況下,如果你不「T任何列形成子類別中選擇最簡單的解決方案是使用不同的條款例如:

Select DISTINCT Comp.*, Cat.* 
    From dbo.Complaints Comp 
    inner Join Categories Cat 
    ON cat.CategoryID= Comp.Cat_ID 
    inner join SubCategories scat 
    ON scat.Category_ID= cat.CategoryID 

Otherwsie你也可以使用列小類與SELECT * ..該行不完全repated因爲你有(至少)的不同子類與類加入相關的1

嘗試使用明確的列名(而不是*)

Select DISTINCT Comp.complainID 
    , Comp.Mode_ID 
    , Comp.Cat_Id 
    , ... 
    , Cat.CategoryID 
    , Cat.Name 
    From dbo.Complaints Comp 
    inner Join Categories Cat 
    ON cat.CategoryID= Comp.Cat_ID 
    inner join SubCategories scat 
    ON scat.Category_ID= cat.CategoryID 
+0

對不起,但仍然重複 – Covert

+0

答案更新丟失DISTINCT(對不起) – scaisEdge