使用临时表搜索项目的历史记录

时间:2019-06-03 18:13:24

标签: mysql sql database search

我承担了一项任务,以检查某项商品的更改方式以及子产品的种类。 我的逻辑是:我将使用一个函数来检查哪些子产品,我的资源已转化为该资源,然后重新运行该功能,直到没有创建子产品为止。我想为我搜索过的每个子产品都有一个临时表(这样就不会陷入某种循环),而另一个临时表中我要插入从函数中搜索到的每个产品。该函数将使用第一个乘积进行重复,并在插入生成的乘积后删除最上面的乘积(我的函数使用的乘积,因此在清空表时会有一个终点)。我被困住了,因为我找不到使这项工作可行的方法。这是我的代码的一部分。

我试图插入到不存在的位置,但无法正确插入。

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

由于delete top语句,第一个Temp表@resultstable中的预期输出应为0。对于第二个表@tempSearch,我应该按照给定的顺序搜索任何项。通常,该功能使用的每个项目都会产生3-6个子产品。请记住,当我的函数产生0个结果(找不到任何生成的产品)时,该过程停止。任何帮助将不胜感激,因为我在SQL方面没有很多经验。

1 个答案:

答案 0 :(得分:1)

确定要使用MySql吗?该语法似乎更像sql-server。如果是sqlserver。 请删除mysql标记并添加sql-server标记。然后,关于您的问题,我认为您必须将IF条件更改为此:

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

如果您的tempsearch表上不存在新的退货项目,请继续执行所需的操作。

也不确定为什么要这样做:

INSERT INTO  @tempSearch
SELECT TOP (1) [BatchNo] FROM @RESULTSTABLE