Поиск в истории предмета с искушаемым - PullRequest
0 голосов
/ 03 июня 2019

Мне дали задание проверить, как предмет изменился и на какие субпродукты.Моя логика заключалась в следующем: я буду использовать функцию, чтобы проверить, какие субпродукты превратились в мой ресурс, и перезапускать функцию до тех пор, пока не будет создан субпродукт.Я хочу иметь временную таблицу для каждого субпродукта, который я искал (таким образом, не попадая в какой-то цикл), и другую временную таблицу, в которую я вставляю каждый продукт, найденный по моей функции.Функция повторится, используя первый товар, и после вставки сгенерированных товаров удалит верхний (тот, который используется моей функцией, таким образом, имея конечную точку, когда таблица опустошается).Я застрял, потому что я не могу найти рабочий способ сделать эту работу.Вот фрагмент моего кода.

Я попытался вставить туда, где не существует, но не смог сделать это правильно.

declare @item NVARCHAR(250)
declare @return NVARCHAR(250)
declare @resultstable TABLE ( [order] NVARCHAR(50),[return] NVARCHAR(50),[genItem] NVARCHAR(50),[BatchNo] NVARCHAR(50),[IsItem] NVARCHAR(50))
declare @tempSearch TABLE ( [Exists] NVARCHAR(50))

SET @item = -- my searching item


INSERT INTO @resultstable
SELECT *
FROM [dbo].[fuction] (@item)
INSERT INTO  @tempSearch
SELECT TOP (1) [BatchNo] FROM @RESULTSTABLE 

WHILE( (SELECT COUNT(*) FROM @resultstable)>0)
  BEGIN
    SET @return = (SELECT TOP(1) [return] FROM @resultstable)
----here is my problem in the if statement
    IF(@return=(SELECT [Exists] FROM @resultstable WHERE [EXISTS] = @return ))

     BEGIN 

      INSERT INTO @tempSearch
      SELECT TOP (1) [return] FROM @resultstable

      INSERT INTO @resultstable
      SELECT *
      FROM [dbo].[function] (@return)

     DELETE TOP(1) FROM @resultstable

    END
    ELSE 
     BEGIN
       DELETE TOP (1) FROM @resultstable        
     END 
END

Ожидаемый результат должен быть 0в первой таблице Temp @resultstable из-за оператора удаления top.Для второй таблицы @tempSearch у меня должен быть любой предмет, который был найден в указанном порядке.В основном каждый элемент, используемый функцией, производит 3-6 субпродуктов.Помните, что процедура останавливается, когда моя функция выдает 0 результатов (не удалось найти сгенерированный продукт).Любая помощь будет в основном оценена, так как у меня нет большого опыта в SQL.

1 Ответ

1 голос
/ 03 июня 2019

Вы уверены, что используете MySql? Этот синтаксис кажется более sql-сервером. Если есть sqlserver. Удалите тег mysql и добавьте тег sql-server. Затем, что касается вашей проблемы, я думаю, что вы должны изменить свое условие ЕСЛИ на это:

IF(NOT EXISTS(SELECT TOP 1 [EXISTS] FROM @tempSearch WHERE [EXISTS] = @return ))

Если новый элемент возврата не существует в вашей таблице временных поисков, тогда продолжайте и делайте то, что вам нужно.

Также не уверен, почему вы делаете это:

INSERT INTO  @tempSearch
SELECT TOP (1) [BatchNo] FROM @RESULTSTABLE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...