首页 >数据库 >mysql教程 >为什么我的 SQL 子查询会产生'选择列表中只能指定一个表达式”错误?

为什么我的 SQL 子查询会产生'选择列表中只能指定一个表达式”错误?

Linda Hamilton
Linda Hamilton原创
2025-01-11 13:36:42316浏览

Why Does My SQL Subquery Produce

排查 SQL 子查询错误:“只能指定一个表达式...”

当您的 SQL 查询在 IN 子句中使用子查询并且子查询尝试返回多个列时,会出现此错误:“当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式” 。 IN 运算符仅接受单个列进行比较。

让我们检查一下有问题的查询:

<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>

内部 SELECT 语句错误地返回 A_IDCOUNT(DISTINCT dNum) AS ud。 这违反了与 IN.

一起使用的子查询的规则

更正的查询:

解决方案涉及重组子查询以仅返回 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>

此修改后的查询现在可以正确选择子查询中的 A_ID,从而解决了错误。 COUNT(DISTINCT dNum) 的排序是在子查询本身内处理的,确保选择前 10% 的 A_ID 值(基于 COUNT(DISTINCT dNum)

以上是为什么我的 SQL 子查询会产生'选择列表中只能指定一个表达式”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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