2016-01-06 76 views
0

我想使用WQL(本質上是SQL)返回包含來自SCCM 2012的項目的行,並且當我修改它以獲取信息時,我在結果中獲取重複行使用內部連接另一臺(本來我也沒在意有SMS_ObjectContainerItem.ContainerNodeID,只是使用的where子句)SQL Inner Join(SCCM 2012 WQL)的重複結果

下面是代碼:

SELECT DISTINCT table1.Name, table1.CollectionID, table2.ContainerNodeID 
FROM table1 
INNER JOIN table2 ON table1.CollectionID = table2.InstanceKey 
WHERE table1.CollectionID IN 
(
    SELECT DISTINCT InstanceKey 
    FROM table2 
    WHERE ObjectType='5000' AND (ContainerNodeID=16777279 OR ContainerNodeID=16777220) 
) AND CollectionType='2' 
ORDER BY table1.Name 

有一件事我要說明的是,提供外部WHERE子句的內部查詢返回55個結果,但完整查詢返回84個結果,其中所有額外結果都是隻是一些以前的重複。獨特不能解決這個問題,我有一種感覺,實際的修復將是Inner Join/where子句的修改,但是我的SQL技能還沒有完成。任何幫助將不勝感激,刪除我得到的額外的行。

謝謝。

更多信息,當我這樣做時,查詢返回沒有重複,這是我寫的原始查詢,但現在我想保留該行所來自的ContainerNodeID,出現額外的行。

SELECT DISTINCT table1.Name, table1.CollectionID 
FROM table1 
WHERE table1.CollectionID IN 
(
    SELECT DISTINCT InstanceKey 
    FROM table2 
    WHERE ObjectType='5000' AND (ContainerNodeID=16777279 OR ContainerNodeID=16777220) 
) AND CollectionType='2' 
ORDER BY table1.Name 

EDITED:通用表名,以方便閱讀。加入其它例如

+0

當你有重複的時候,你想要哪一個?樣本數據和期望的結果將有助於澄清你真正想做的事情。 –

回答

1

這會不會有重複,但不是一個偉大的解決方案,因爲它沒有解決你的邏輯問題:

SELECT table1.Name, table1.CollectionID, table2.ContainerNodeID 
FROM table1 
INNER JOIN table2 ON table1.CollectionID = table2.InstanceKey 
WHERE table1.CollectionID IN 
(
    SELECT DISTINCT InstanceKey 
    FROM table2 
    WHERE ObjectType='5000' AND (ContainerNodeID=16777279 OR ContainerNodeID=16777220) 
) AND CollectionType='2' 
ORDER BY table1.Name 
GROUP BY table1.Name, table1.CollectionID, table2.ContainerNodeID 

你得到重複,因爲在表2多行對於給定的InstanceKey。相反,你想要的只是在table2中爲每個實例鍵只加入一行,而目前所有的行在兩行中都是相同的,所以你將它看作重複項。如果你有一個唯一的鍵(在表2中)加入,那麼你不會有重複的行問題。

+0

這是一個很好的解決方案,我確信它可以用於其他一些情況,但是WQL實際上不支持GROUP BY子句。有趣的是,沒有內部聯接,並刪除了對table2.containerNodeId的請求,此代碼工作正常,只返回預期的結果數量。 – user2346731

+0

好吧,現在就把它作爲解決方案,因爲你對table2有重複的說法是正確的(我仍然沒有弄清楚這個原因,但是我確實找出了我需要刪除多餘重複的過濾器。對於外部查詢的ObjectType ='5000'以及內部固定它。 – user2346731