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

同表子查询过滤数据时遇多行返回错误的解决求助

解决SQL子查询返回多行的错误

你遇到的single-row subquery returns more than one row错误,是因为你用LIKE去匹配一个返回多条记录的子查询了——LIKE和=这类操作符只能对应单个值,子查询返回多行就会触发这个报错。

按照你的需求,要拿第一个查询的结果过滤第二个查询,也就是找出同时满足以下两个条件的workorder:

  1. 存在于「equipment含ABC且dataofinterest含EFG」的结果集中
  2. 自身满足dataofinterest LIKE '%HIJ%'

下面给你几个可行的写法:

方法1:用IN替代LIKE

把原来的workorder LIKE改成workorder IN,因为IN可以匹配多个值:

SELECT workorder
FROM pidata
WHERE dataofinterest LIKE '%HIJ%' 
  AND workorder IN (
    SELECT workorder
    FROM pidata
    WHERE equipment LIKE '%ABC%' 
      AND dataofinterest LIKE '%EFG%'
  )

方法2:用EXISTS关联子查询

这种写法性能通常更好,尤其是表数据量大的时候,它会逐行检查是否存在匹配的记录:

SELECT p1.workorder
FROM pidata p1
WHERE p1.dataofinterest LIKE '%HIJ%'
  AND EXISTS (
    SELECT 1
    FROM pidata p2
    WHERE p2.workorder = p1.workorder
      AND p2.equipment LIKE '%ABC%'
      AND p2.dataofinterest LIKE '%EFG%'
  )

方法3:用JOIN实现

通过自连接来筛选符合条件的记录,逻辑更直观:

SELECT DISTINCT p1.workorder
FROM pidata p1
JOIN pidata p2 
  ON p1.workorder = p2.workorder
WHERE p1.dataofinterest LIKE '%HIJ%'
  AND p2.equipment LIKE '%ABC%'
  AND p2.dataofinterest LIKE '%EFG%'

这里加DISTINCT是为了避免同一个workorder出现重复结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:24:57