代码之家  ›  专栏  ›  技术社区  ›  guest86

mysql删除在哪里查找不起作用

  •  0
  • guest86  · 技术社区  · 6 年前

    我有一个mysql存储过程,它有多个部分。过程接收一个int“inid”和一个varchar(500)参数,称为“inignorollogtypes”,它是一个用逗号分隔的数字列表。

    SQL的第一部分如下:

    DECLARE affectedNumbers text;
    
    SELECT GROUP_CONCAT(am.Numbers) INTO affectedNumbers FROM Users am WHERE am.userID = inId;
    

    我需要这样做,因为变量“affectedNumbers”稍后将在这个相当大的存储过程中使用,因此为了性能,我不希望每次需要查找列表时都“in(select…)”。

    我检查了变量“affectedNumbers”get是否正确填充了逗号分隔的值。 下一部分是这个(这就是问题发生的地方):

    DELETE FROM UserLogs WHERE
    FIND_IN_SET(User_Number, affectedNumbers) AND
    NOT FIND_IN_SET(LogType, inIgnoreLogTypes);
    

    上面的陈述没有任何作用,经过数小时的寻找“为什么”,我找不到答案…可能是因为“affctedNumbers”是文本,“user_number”是int?或者可能是因为“logtype”是int,而“inignorollogtypes”是varchar?

    我检查了两个集合,它们是逗号分隔的整数…

    1 回复  |  直到 6 年前
        1
  •  0
  •   guest86    6 年前

    找到问题了!我必须用这样的东西:

    DELETE FROM UserLogs WHERE
    FIND_IN_SET(UserLogs.User_Number, affectedNumbers) AND
    NOT FIND_IN_SET(UserLogs.LogType, inIgnoreLogTypes);
    

    奇怪,因为没有错误……现在它开始工作了。