我试图从表中选择ID,如果它们是由另一个表上的查询找到的(我的最终目标是从第二个表中删除第一个查询中带有ID的行)。以下是我的尝试:
SELECT @MyList:=GROUP_CONCAT(Id SEPARATOR ', ') AS MyList
FROM myitems
WHERE MyString IS NULL OR MyString = '';
因此@MyList
包含'41, 42, 49, 51'
基于FIND_IN_SET的查询只返回一行
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, @MyList) > 0;
预期结果:
41
42
返回
41
如果我使用IN,我会得到相同的结果:
SELECT Id
FROM myitems2
WHERE Id IN (@MyList);
我还尝试了一个基于LOCATE
的查询,但它返回的不是集合中的ID:
SELECT Id
FROM myitems2
WHERE LOCATE(Id, @MyList) > 0;
预期结果:
41
42
返回
1
2
4
5
9
41个
42
如何修复查询?
答案 0 :(得分:1)
FIND_IN_SET不起作用,因为逗号后面有空格。
替换:
GROUP_CONCAT(Id SEPARATOR ', ')
通过:
GROUP_CONCAT(Id SEPARATOR ',')
或者你可以这样做:
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, replace(@MyList, ' ', ''));