首页 > 解决方案 > 子查询返回多行没有运算符

问题描述

我有这个 SQL 查询

SELECT LEFT(ORIGINALPATH, 34), count(originalpath) as docType1,
(SELECT count(originalpath)
FROM   docType2 
WHERE  ORIGINALPATH LIKE 'D:\era-server\16\ibosdata\00001\%' 
GROUP  BY LEFT(ORIGINALPATH, 34)) AS [dcoType2]
FROM   docType1
WHERE  ORIGINALPATH LIKE 'D:\era-server\16\ibosdata\00001\%' 
GROUP  BY LEFT(ORIGINALPATH, 34) 
ORDER  BY LEFT(ORIGINALPATH, 34);

但我收到以下错误

子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

尽管我没有使用这样的运算符。请帮忙。

标签: sqlsql-servertsqlsubquery

解决方案


您可以删除内部组并尝试一下。可能 group by 可能会在子查询中创建多行。已编辑:添加了一个条件以确保分组依据是根据相同的分组元素。

SELECT LEFT(ORIGINALPATH, 34), count(originalpath) as docType1,
(SELECT count(originalpath)
FROM   docType2 de
WHERE  ORIGINALPATH LIKE 'D:\era-server\16\ibosdata\00001\%' 
and LEFT(de.ORIGINALPATH, 34) = LEFT(d1.ORIGINALPATH, 34)
GROUP  BY LEFT(ORIGINALPATH, 34)) AS [dcoType2]
FROM   docType1 d1
WHERE  ORIGINALPATH LIKE 'D:\era-server\16\ibosdata\00001\%' 
GROUP  BY LEFT(ORIGINALPATH, 34) 
ORDER  BY LEFT(ORIGINALPATH, 34);

推荐阅读