如果是另一个查询的结果,则查询选择ID

时间:2016-05-11 17:58:58

标签: mysql arrays find-in-set

我试图从表中选择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

如何修复查询?

1 个答案:

答案 0 :(得分:1)

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

替换:

GROUP_CONCAT(Id SEPARATOR ', ')

通过:

GROUP_CONCAT(Id SEPARATOR ',')

或者你可以这样做:

SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, replace(@MyList, ' ', ''));