如果是另一个查询的结果,则查询 select Id
Query to select Id if in result of another query
我正在尝试 select 来自 table 的 ID,如果它们是通过对另一个 table 的查询找到的(我的最终目标是从第二个 table, 第一个查询中带有 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 returns只有一行
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, @MyList) > 0;
预期结果:
41
42
Returns
41
如果我使用 IN:
我会得到相同的结果
SELECT Id
FROM myitems2
WHERE Id IN (@MyList);
我也尝试了基于 LOCATE
的查询,但它 returns ID 不在集合中:
SELECT Id
FROM myitems2
WHERE LOCATE(Id, @MyList) > 0;
预期结果:
41
42
Returns
1
2
4
5
9
41
42
如何解决我的疑问?
FIND_IN_SET 不起作用,因为逗号后有空格。
替换:
GROUP_CONCAT(Id SEPARATOR ', ')
作者:
GROUP_CONCAT(Id SEPARATOR ',')
或者你可以这样做:
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, replace(@MyList, ' ', ''));
我正在尝试 select 来自 table 的 ID,如果它们是通过对另一个 table 的查询找到的(我的最终目标是从第二个 table, 第一个查询中带有 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 returns只有一行
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, @MyList) > 0;
预期结果:
41
42
Returns
41
如果我使用 IN:
我会得到相同的结果SELECT Id
FROM myitems2
WHERE Id IN (@MyList);
我也尝试了基于 LOCATE
的查询,但它 returns ID 不在集合中:
SELECT Id
FROM myitems2
WHERE LOCATE(Id, @MyList) > 0;
预期结果:
41
42
Returns
1
2
4
5
9
41
42
如何解决我的疑问?
FIND_IN_SET 不起作用,因为逗号后有空格。
替换:
GROUP_CONCAT(Id SEPARATOR ', ')
作者:
GROUP_CONCAT(Id SEPARATOR ',')
或者你可以这样做:
SELECT Id
FROM myitems2
WHERE FIND_IN_SET(Id, replace(@MyList, ' ', ''));