【问题标题】:Duplicate results from SQL Inner Join (SCCM 2012 WQL)SQL 内部联接的重复结果 (SCCM 2012 WQL)
【发布时间】:2016-01-06 23:55:17
【问题描述】:

我正在尝试使用 WQL(本质上是 SQL)返回包含来自 SCCM 2012 的项目的行,当我修改它以使用内部联接从另一个表中提取信息时,我的结果中出现重复行(最初我做了不在乎有 SMS_ObjectContainerItem.ContainerNodeID 并简单地使用 where 子句)

代码如下:

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 个结果,其中所有额外内容只是前面一些结果的重复。 Distinct 并没有解决这个问题,我感觉实际的修复将是对 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:通用的表名以方便阅读。添加其他示例

【问题讨论】:

  • 当你有重复的时候,你想要哪些?样本数据和期望的结果将有助于阐明您真正想要做什么。

标签: sql join sccm wql


【解决方案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

由于给定的 InstanceKey 在 table2 中存在不止一行,因此您得到了重复。相反,您想要的是一种只为每个 instancekey 加入 table2 中的一行的方法,当前所有行在两行中都相同,因此您将其视为重复项。如果您有一个唯一键(在 table2 中)要加入,那么您将不会遇到重复行问题。

【讨论】:

  • 这是一个很好的解决方案,我确信它适用于其他一些情况,但 WQL 实际上不支持 GROUP BY 子句。有趣的是,没有内连接,并且删除了对 table2.containerNodeId 的请求,这段代码工作正常,只返回预期数量的结果。
  • 好的,现在将其作为解决方案,因为您对 table2 有重复项是正确的(我仍然没有弄清楚原因,但我确实找到了需要删除的过滤器额外的重复项。在外部查询中添加对 ObjectType='5000' 的检查以及内部修复它。
猜你喜欢
  • 2018-09-19
  • 2022-11-13
  • 2013-02-08
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2012-03-24
相关资源
最近更新 更多