首页 >数据库 >mysql教程 >为什么我的 SQL 子查询会产生'仅允许一个表达式”错误?

为什么我的 SQL 子查询会产生'仅允许一个表达式”错误?

Patricia Arquette
Patricia Arquette原创
2025-01-11 13:17:42670浏览

Why Does My SQL Subquery Produce an

SQL 子查询错误:“仅允许一个表达式”

IN 子句中使用的子查询返回多列时,会出现此错误:“当未使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式”。 IN 运算符需要单列结果集进行比较。

有问题的查询:

以下查询尝试在 A_ID 子句中使用返回 ud 和计数 (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_IDudIN 运算符无法处理此问题;它需要单个列来与外部查询中的 A_ID 列进行比较。

更正的查询:

解决方案是修改子查询以仅返回 A_ID 列。 可以使用 ORDER BY COUNT(DISTINCT dNum) DESC:

在子查询内完成按计数排序
<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 值的计数正确选择前 10% 的 dNum 值,然后使用这些 A_ID 值来过滤外部查询。

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

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