2016-12-20 6 views
0

У меня есть две таблицы информации об учетной записи. 1-я таблица T1 имеет описания всех товарных линий вместе с номером отправки, именем, регионом, статусом, полином и несколькими другими. Вторая таблица T2 имеет только связанную с ней информацию только для строки свойств вместе с указанием ее номера, региона, статуса, номера политики и других. Затем имена столбцов по-разному называются в обеих таблицах.Найдите отсутствующие записи, которые не являются нулевыми

Мне нужно, чтобы сравнить две таблицы и найти недостающие номера политики строки свойств во второй таблице T2. Я попробовал приведенный ниже код, и я получаю список, но я вижу нулевые значения. Как я должен устранить эти нулевые значения из результата?

SELECT a.[Master Policy Number] 
FROM DB1.dbo.Global_Submission_Log AS a 
WHERE 
    a.[Master Policy Number] NOT IN (
     SELECT b.PolNo 
     FROM DB1.dbo.PROPERTY_Files AS b 
     WHERE b.PolNo = a.[Master Policy Number] 
      AND a.[Master Policy Number] IS NOT NULL 
    ) 
+0

Вы не просто хотите, чтобы не в (Select b.PolNo ... быть In (Выберите ...? Вы говорите, где. [Номер основной политики] не является нулевым), поэтому вы находите нулевые – user1628733

ответ

2

Вы можете перемещать is not null вне поля подзаголовок. У вас уже есть условие =, в котором будут исключены нули.

Select a.[Master Policy Number] 
From DB1.dbo.Global_Submission_Log a 
Where a.[Master Policy Number] Not In (Select b.PolNo 
             From DB1.dbo.PROPERTY_Files b 
             Where b.PolNo = a.[Master Policy Number]) 
And a.[Master Policy Number] Is Not Null 
+0

Это сработало. Большое вам спасибо. если мне нужно использовать больше фильтров, мне нужно использовать вне подзапроса? Скажите, что в случае, мне нужно, чтобы сублимация продукта также была просто «Свойством», а статус должен быть «Связан» – Shasti

+0

Да, используйте основной запрос. – JohnHC

0

Если вы хотите, чтобы отфильтровать NULL значения, то этот фильтр должен идти в запросе внешнего, а не в запросе на внутреннего:

Select a.[Master Policy Number] 
From DB1.dbo.Global_Submission_Log a 
Where a.[Master Policy Number] Is Not Null and 
     a.[Master Policy Number] Not In (Select b.PolNo 
             From DB1.dbo.PROPERTY_Files b 
             Where b.PolNo = a.[Master Policy Number] 
             ); 

О, это очень странно. Вы сравниваете одни и те же столбцы для NOT IN, которые используются в предложении корреляции. По этой причине и семантике NOT IN, вы должны просто использовать NOT EXISTS.

Следует отметить, что NOT IN с подзапросом опасен. Если b.PolNoникогдаNULL, то NOT IN никогда не вернется. Моя рекомендация состоит в том, чтобы использовать вместо NOT EXISTS:

Select gsl.[Master Policy Number] 
From DB1.dbo.Global_Submission_Log gsl 
Where gsl.[Master Policy Number] Is Not Null and 
     not exists (select 1 
        from DB1.dbo.PROPERTY_Files pf 
        where pf.PolNo = gsl.[Master Policy Number] 
       ); 

Обратите внимание, что я также думаю, запросы легче следовать, если таблица псевдонимов аббревиатуры для самих таблиц.

+0

У вас есть дополнительный парс после 'Is Not Null' – Kateract

1
Select a.[Master Policy Number] 
From DB1.dbo.Global_Submission_Log a 
Where a.[Master Policy Number] Not In (Select b.PolNo 
From DB1.dbo.PROPERTY_Files b 
Where b.PolNo = a.[Master Policy Number] 
) 
/* filter nulls on main query */ And a.[Master Policy Number] Is Not Null 
0

Если ваш результат будет один, который показывает вам список нуля, вы могли бы просто использовать delete from для удаления результата.

delete from DB1.dbo.Global_Submission_Log Where [Master Policy Number] in ( Select a.[Master Policy Number]From DB1.dbo.Global_Submission_Log a Where a.[Master Policy Number] Not In (Select b.PolNo From DB1.dbo.PROPERTY_Files b Where b.PolNo = a.[Master Policy Number] And a.[Master Policy Number] Is Not Null) )

0

Пробовали ли вы присоединиться к левой?

Select T1.[Master Policy Number] 
From DB1.dbo.Global_Submission_Log T1 
LEFT JOIN DB1.dbo.PROPERTY_Files T2 
ON T1.[Master Policy Number] on T2.PolNo 
Where b.PolNo IS NULL 

это обеспечит вам номера политики, которые не присутствуют в таблице Property_Files но в Global_Submission таблице

 Смежные вопросы

  • Нет связанных вопросов^_^