首页 >数据库 >mysql教程 >为什么My SQL子查询返回'当子查询不带EXISTS引入时,只能在选择列表中指定一个表达式?”

为什么My SQL子查询返回'当子查询不带EXISTS引入时,只能在选择列表中指定一个表达式?”

Susan Sarandon
Susan Sarandon原创
2025-01-11 13:26:42629浏览

Why Does My SQL Subquery Return

SQL 子查询错误:SELECT 列表中存在单个表达式

此 SQL 查询生成错误:

<code class="language-sql">select count(distinct dNum)
 from myDB.dbo.AQ
 where A_ID in 
  (SELECT DISTINCT TOP (0.1) PERCENT A_ID, 
            COUNT(DISTINCT dNum) AS ud 
 FROM         myDB.dbo.AQ
 WHERE     M > 1 and B = 0 
 GROUP BY A_ID ORDER BY ud DESC)</code>

错误消息“当子查询未使用 EXISTS 引入时,只能在选择列表中指定一个表达式”,表明子查询的 SELECT 子句存在问题。 子查询尝试返回两列:A_IDCOUNT(DISTINCT dNum)。使用 IN(或其他比较运算符,例如 =!= 等)时,子查询的 SELECT 列表必须仅包含单个列。

解决方案:

更正后的查询应仅从子查询中返回 A_ID

<code class="language-sql">select count(distinct dNum)
from myDB.dbo.AQ
where A_ID in
  (SELECT DISTINCT TOP (0.1) PERCENT A_ID
  FROM myDB.dbo.AQ
  WHERE M > 1 and B = 0
  GROUP BY A_ID)
ORDER BY COUNT(DISTINCT dNum) DESC;</code>

注意变化:

  • 子查询的 SELECT 子句现在仅包含 A_ID
  • 之前位于子查询中的 ORDER BY 子句已移至外部查询。 这是因为原始的 ORDER BY 试图在子查询结果用于 IN 子句之前对其进行排序; 排序应应用于最终结果集。

此修改后的查询正确选择了在子查询结果中找到 dNum 的不同 A_ID 值的计数。 子查询根据不同 A_ID 的计数有效识别前 10% 的 dNum 值,然后外部查询对与这些选定 dNum 关联的不同 A_ID 值进行计数。 最后的 ORDER BY 子句根据不同 dNum 值的计数对结果进行排序。

以上是为什么My SQL子查询返回'当子查询不带EXISTS引入时,只能在选择列表中指定一个表达式?”的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn