You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询space_id所有id匹配batch_ids表对应记录的方法

报错原因

原查询抛出Single-row subquery returns more than one row错误,是因为concat()中嵌套的子查询会返回space_id表的全部id(多行结果),MySQL中用于等值、LIKE匹配的单行子查询仅允许返回1条记录,无法直接传入多值完成批量匹配。

正确实现方案

方案1:内关联匹配(推荐,性能更优)

通过两张表关联,对每个space_id匹配符合规则的batch_id,写法如下:

WITH space_ids AS(
  SELECT id FROM space_id
)
SELECT DISTINCT b.batch_id
FROM batch_ids b
INNER JOIN space_ids s
  ON b.request_id LIKE CONCAT('task_', s.id, '_task%');

语句中加DISTINCT是为了避免极端场景下同一个batch_id匹配多个space_id时返回重复结果,最终输出的就是你需要的去重后batch_id集合。

方案2:EXISTS子查询写法

不需要额外去重,只要batch_id能匹配到任意一个存在的space_id就会被返回,逻辑和方案1完全一致:

SELECT batch_id
FROM batch_ids b
WHERE EXISTS (
  SELECT 1
  FROM space_id s
  WHERE b.request_id LIKE CONCAT('task_', s.id, '_task%')
);

如果你的MySQL是5.x版本不支持CTE语法,直接去掉WITH部分,在关联/子查询中直接查询space_id表即可。

匹配规则注意事项
  • 不要直接使用CONCAT(s.id, '%')做匹配,否则当space_id存在前缀重叠场景(比如同时存在spa_1、spa_11两个id)时,会出现匹配错误。拼接匹配串时带上request_id中id前后的固定字符task_和_task,可以保证匹配精准度,不会误捞不属于对应空间的记录。

内容的提问来源于stack exchange,提问作者sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:18:14