1

如果通过对另一个表的查询找到它们,我正在尝试从一个表中选择 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,但它返回的 Ids 不在集合中:

SELECT Id
FROM myitems2
WHERE LOCATE(Id, @MyList) > 0;

预期结果:

41
42

退货

1
2
4
5
9
41
42

如何修复我的查询?

4

1 回答 1

1

FIND_IN_SET 不起作用,因为逗号后有空格。

代替 :

GROUP_CONCAT(Id SEPARATOR ', ')

经过 :

GROUP_CONCAT(Id SEPARATOR ',')

或者你可以这样做:

SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, replace(@MyList, ' ', ''));
于 2016-05-11T18:07:16.677 回答