SQL NOT EXIST 在查询结果中返回重复值
Posted
技术标签:
【中文标题】SQL NOT EXIST 在查询结果中返回重复值【英文标题】:SQL NOT EXIST returning duplicate value in query results 【发布时间】:2018-03-20 16:12:42 【问题描述】:嗨,似乎从这个 sql 代码中得到了重复,它假设在 BO Data 上找到不在 Order Data上的记录> 使用以下作为键 Keyorderstatus 我所有的查询结果都在 Order Data已经,如何解决这个问题?
SELECT Keyorderstatus,
OrderNumber,
PartsNo,
HoldType,
ShiptoCode,
BackOrderQty,
OrderStatusCode
FROM [BO Data]
WHERE NOT EXISTS (SELECT *
FROM [BO Data]
WHERE [BO Data].Keyorderstatus = [Order Data].Keyorderstatus
)
AND [BO Data].OrderStatusCode="AWAITING_SHIPPING"
AND NOT EXISTS (SELECT *
FROM [Order Data]
WHERE Keyorderstatus IS NULL);
【问题讨论】:
这将很难,因为我们不知道您的数据是什么样的。如果您要删除欺骗,请尝试在您的 SELECT 之后抛出 DISTINCT。 这一行:WHERE [BO Data].Keyorderstatus = [Order Data].Keyorderstatus
使用了[Order Data]表,但是这个表不包含在同一个select
中,会重复数据
第二个NOT EXISTS
不相关?第一个应该返回一个错误消息,因为它使用的是来自不同表的列。
您好,感谢@dfundako 的快速响应,我将在该代码中的何处使用 DISTINCT。
@RicardoPontual 感谢您的修改,它非常有效,我发现它在查询中复制记录的原因最初我要求它检查“ WHERE NOT EXISTS (SELECT * FROM [BO Data ]' 应该是 '[Order Data]' 来解决我的所有问题,感谢所有关于此问题的建议。
【参考方案1】:
正如@dfundako 所说 - 没有数据表来测试很难检查。
我认为这个 SQL 应该做你所追求的:
SELECT [BO Data].KeyOrderStatus
, OrderNumber
, PartsNo
, HoldType
, ShipToCode
, BackOrderQty
, [BO Data].OrderStatusCode
FROM [BO Data] LEFT JOIN [Order Data] ON [BO Data].KeyOrderStatus <> [Order Data].KeyOrderStatus
WHERE [BO Data].OrderStatusCode = 'AWAITING SHIPPING'
GROUP BY [BO Data].KeyOrderStatus
, [BO Data].OrderStatusCode
检查[Order Data].KeyOrderStatus IS NULL
可能没有必要,因为(我假设)[BO Data].KeyOrderStatus
是主键,因此它必须始终包含一个值,并且 SQL 检查该值是否与 [Order Data] 中的值不同 - 如果是NULL它会不同于PK。
编辑:我已在与联接无关的其他字段中添加。你必须对这些进行分组。
【讨论】:
以上是关于SQL NOT EXIST 在查询结果中返回重复值的主要内容,如果未能解决你的问题,请参考以下文章