SQL Fiddle
У меня есть динамический длинный (> 1000) список компонентов и их соответствующих типов активов в Excel. Пример:
Component Asset Type
0738.D100.L00.55 9211.D108.D07.01_02.02
0738.D100.L00.71 0738.D100.L00.55_04.04
0738.D100.M02.55 0738.D100.M00.60_03.03
0990.OH05.A00.09 0738.D100.M00.60_03.03
Некоторые из этих комбинаций могут отсутствовать в базе данных SQL. Я хочу запрос, который выводит эти комбинации.
Компоненты и их соответствующие типы активов могут быть запрошены следующим образом
Select C.Code, AT.Code From astComponents C
Join astAssetTypes AT ON AT.Id = C.AssetTypeId
Я создал метод, который использует временную таблицу для сравнения, но протестирован с 1250 комбинациями, этот метод работает медленно ~ 6,5 секунд, из которых создание таблицы составляет ~ 2 секунды.
Create Table
#Temp(Component nvarchar(50) Collate Latin1_General_BIN, AssetType nvarchar(50) Collate Latin1_General_BIN)
Insert Into #Temp (Component, AssetType) Values ('0738.D100.L00.55','9211.D108.D07.01_02.02');
Insert Into #Temp (Component, AssetType) Values ('0738.D100.L00.71','0738.D100.L00.55_04.04');
Insert Into #Temp (Component, AssetType) Values ('0738.D100.M02.55','0738.D100.M00.60_03.03');
Insert Into #Temp (Component, AssetType) Values ('0990.OH05.A00.09','0738.D100.M00.60_03.03');
--more Inserts left out
Select Distinct
Compare.Component,
Compare.AssetType
From astComponents C
Join astAssetTypes AT ON AT.Id = C.AssetTypeId
Right Join #Temp Compare ON Compare.AssetType = AT.Code And Compare.Component = C.Code
Where C.Code is null
В на скрипке ожидаемый результат будет ниже, если мы используем верхний пример в качестве наших данных для проверки. Эти комбинации компонентов и типов активов не существуют в базе данных fiddle.
Component Asset Type
0738.D100.M02.55 0738.D100.M00.60_03.03
0990.OH05.A00.09 0738.D100.M00.60_03.03
Я хочу более быстрый метод. Помощь будет принята с благодарностью