MySql删除在\u集中查找\u不起作用的位置
我有一个MySql存储过程,它有多个部分。过程接收一个INT“inId”和一个名为“inIgnoreLogTypes”的VARCHAR(500)参数,该参数是一个逗号分隔的数字列表 SQL的第一部分如下所示:MySql删除在\u集中查找\u不起作用的位置,mysql,stored-procedures,Mysql,Stored Procedures,我有一个MySql存储过程,它有多个部分。过程接收一个INT“inId”和一个名为“inIgnoreLogTypes”的VARCHAR(500)参数,该参数是一个逗号分隔的数字列表 SQL的第一部分如下所示: DECLARE affectedNumbers text; SELECT GROUP_CONCAT(am.Numbers) INTO affectedNumbers FROM Users am WHERE am.userID = inId; DELETE FROM UserLogs W
DECLARE affectedNumbers text;
SELECT GROUP_CONCAT(am.Numbers) INTO affectedNumbers FROM Users am WHERE am.userID = inId;
DELETE FROM UserLogs WHERE
FIND_IN_SET(UserLogs.User_Number, affectedNumbers) AND
NOT FIND_IN_SET(UserLogs.LogType, inIgnoreLogTypes);
我需要这样做,因为变量“affectedNumbers”稍后将在这个相当大的存储过程中使用,所以为了性能起见,我不想每次需要查找列表时都“IN(Select…)”
我检查了,变量“affectedNumbers”get用逗号分隔的值正确填充。
下一部分是(问题就发生在这里):
上面的陈述毫无作用,经过几个小时的“为什么”搜索,我找不到答案。。。也许是因为“affecedNumbers”是文本,“User\u Number”是INT?或者可能是因为“LogType”是INT,“inIgnoreLogTypes”是VARCHAR
我检查了两个集合,它们都是逗号分隔的整数…发现了问题!我必须用这样的东西:
DECLARE affectedNumbers text;
SELECT GROUP_CONCAT(am.Numbers) INTO affectedNumbers FROM Users am WHERE am.userID = inId;
DELETE FROM UserLogs WHERE
FIND_IN_SET(UserLogs.User_Number, affectedNumbers) AND
NOT FIND_IN_SET(UserLogs.LogType, inIgnoreLogTypes);
奇怪,因为没有错误。。。。现在它起作用了