Skip to content Skip to sidebar Skip to footer

No Records Found When Running Not In Operator

I am trying to get records from one table excluding some records (Order No.'s in the Union). Can anybody tell me what could be wrong with this query. I am getting no records after

Solution 1:

I would use NOT EXISTS instead :

SELECT t.*
FROM [dbo].[FMD15_18] t
WHERE NOT EXISTS (SELECT 1 
                  FROM [dbo].[FMD15_18] t1 
                  WHERE t1.OrderNo = t.OrderNo AND 
                        t1.[Item Description] Like '%AP%') AND
      NOT EXISTS (SELECT 1 
                  FROM [dbo].[AP&C] a
                  WHERE a.OrderNo = t.OrderNo);

However, i suspect some nullable issues with current query. If so, then you need to fiter out with IS NOT NULL in subquery.


Solution 2:

NOT IN is tricky. I guess that OrderNo is nullable that is why you don't get any rows.

SELECT * 
FROM [dbo].[FMD15_18] 
WHERE [OrderNo] NOT IN (SELECT COALESCE(OrderNo, '^')
                        FROM [dbo].[FMD15_18] 
                        WHERE [Item Description] Like '%AP%'
                        UNION ALL 
                        SELECT COALESCE([OrderNo], '^') FROM [dbo].[AP&C]
                        );

Explanation:

1 IN (1, NULL)
<=> 
1=1 OR 1 = NULL 
-- 1 row returned

And NOT NULL:

1 NOT IN (1, NULL)
1!=1 AND 1 != NULL
-- always not true
-- always 0 rows returned

Solution 3:

You should be able to avoid using sub-queries entirely. It sounds like you want orders (from FMD15_18) where the description does not contain "AP", and the order number is not in the AP&C table. If that's the case, you could do something like the following:

select FMD15_18.*
from FMD15_18
    left join [AP&C] on
        [AP&C].OrderNo = FMD15_18.OrderNo
where
    FMD15_18.[Item Description] NOT like '%AP%'
    and [AP&C].OrderNo is null

I don't know what kind of data is in the [FMD15_18].[Item Description] field, but it seems heavy-handed to exclude items where the description contains 2 letters. How long does the description column tend to be? Might there be records that contain "AP" that you're excluding inadvertently? Items with descriptions as varied as "APPLE", "MAPLE SYRUP", and "BURLAP" would be excluded based on this condition.


Post a Comment for "No Records Found When Running Not In Operator"