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

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

Patricia Arquette
发布: 2025-01-11 13:17:42
原创
668 人浏览过

Why Does My SQL Subquery Produce an

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

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

有问题的查询:

以下查询尝试在 A_ID 子句中使用返回 ud 和计数 (IN) 的子查询:

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)
登录后复制

根本原因:

内部 SELECT 语句返回两列:A_IDudIN 运算符无法处理此问题;它需要单个列来与外部查询中的 A_ID 列进行比较。

更正的查询:

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

在子查询内完成按计数排序
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)
登录后复制

此修订后的查询根据不同 A_ID 值的计数正确选择前 10% 的 dNum 值,然后使用这些 A_ID 值来过滤外部查询。

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板