带子查询的查询返回null

时间:2017-11-14 09:31:15

标签: c# tsql

我有一个查询返回没有结果,尽管仍有大量行要处理。

SELECT O.[OrderLineId]
, O.[Article]
, O.[ArticleDescription]
, O.[QtyOrdered]
, O.[QtyDelivered]
, O.[BoxId]
, O.[Status]
, O.[Picker]
, O.[PickLocation]
, O.[Sorting]
, O.[DateCreated]
, O.[DateModified]
FROM [dbo].[PickBatch] P 
INNER JOIN [dbo].[Boxes] B ON P.PickBatchId = B.PickBatchId
INNER JOIN [dbo].[OrderLines] O ON B.BoxId = O.BoxId
WHERE P.PickBatchId = @PickBatchId 
AND (O.[Status] = @Status)
AND (O.[PickLocation] = (SELECT TOP(1) O.[PickLocation] 
                        FROM [dbo].[PickBatch] P 
                      INNER JOIN [dbo].[Boxes] B ON P.PickBatchId = B.PickBatchId
                      INNER JOIN [dbo].[OrderLines] O ON B.BoxId = O.BoxId
                      WHERE P.PickBatchId = @PickBatchId 
                      AND O.[Status] = @Status      
                      ORDER BY O.Sorting))

看起来子查询返回结果,同时状态被更改,以便主查询不返回任何结果。这可能吗?或者我犯了另一个错误?

当查询未返回任何结果时,系统会提示用户已选择所有内容,并且他可以启动新批处理。当他想要开始新的批次时,检查他是否没有开放批次。这会激发一些查询和此查询。然后查询返回结果。所以基本上查询是没有结果,秒。以后相同的查询返回结果。

2 个答案:

答案 0 :(得分:0)

我想假设您的查询是准确的,但您不能在主查询和子查询中使用相同的别名。别名用于区分同一个表。所以在你的子查询中:

  • 而不是P使用P2
  • 而不是B使用B2
  • 而不是O使用O2

因此。如果您的查询无效,请发布数据集和预期结果集

答案 1 :(得分:0)

您能为这些表描述主键吗?我认为子查询的问题总是返回一行但与主查询值不匹配。