Я занимаюсь поисковой системой, которая получает список поставщиков и идентификаторов бренда. Они входят в строки и преобразуются в таблицу с UDF. Каждый бренд имеет идентификатор поставщика.Более эффективный способ избежать ошибок
Поэтому, чтобы ограничить поиск маркой и поставщиками, выбранными пользователем, мне нужно заполнить временные таблицы этими значениями, а затем ПРИСОЕДИНИТЬ их к моим результатам поиска. Теперь пользователь может выбрать целого поставщика для поиска, а затем выбрать бренды у другого поставщика differnet. Это должен быть сценарий заказа, поэтому в дополнение к заполнению списка поставщиков iwth идентификаторы поставщика, переданные в параметр, я также должен получить идентификатор поставщика от марки, в которую они входят, и загрузить их также.
Существует также код авторизационного кода, который я удалил, но это в основном то, что я делаю.
INSERT INTO #TempBrandList (Brand_ID, Brand_Owner)
SELECT gID, brands.brandowner FROM dbo.f_ConvertGuidList_to_Table(@brandList) JOIN brands ON TempBrandList.Brand_ID=brands.brandid
INSERT INTO #TempSupplierList (Supplier_ID)
SELECT gID FROM dbo.f_ConvertGuidList_to_Table(@supplierList)
INSERT INTO #TempSupplierList (Supplier_ID)
SELECT DISTINCT Brand_Owner FROM #TempBrandList WHERE Brand_OWNER NOT IN (SELECT Supplier_ID FROM #TempSupplierList)
Я обеспокоен тем, что NOT IN не вызовет проблем и не очень эффективен. Было бы лучше иметь 2 таблицы #temp, просто вставить в нее прямую вставку, а затем сделать вторую вставку DISTINCT ко второй, присоединив вторую к основному поисковому коду, чтобы ограничить результаты?
Я бы не стал беспокоиться о проблеме с производительностью, пока у вас ее не будет. WHERE NOT IN довольно эффективно. – Paparazzi