首页 > 数据库 > mysql教程 > 为什么 WHERE IN 子句中的 My SQL 子查询返回'选择列表中只能指定一个表达式”?

为什么 WHERE IN 子句中的 My SQL 子查询返回'选择列表中只能指定一个表达式”?

DDD
发布: 2025-01-11 13:22:41
原创
702 人浏览过

Why Does My SQL Subquery in a WHERE IN Clause Return

SQL 子查询在 WHERE IN 子句中的选择:理解错误“当子查询未以 EXISTS 开头时,选择列表中只能指定一个表达式”

在尝试将子查询添加到 WHERE IN 子句时,务必确保子查询返回单个列以进行比较。错误“当子查询未以 EXISTS 开头时,选择列表中只能指定一个表达式”表示您的子查询返回多列。

为了纠正这个问题,让我们检查给定的查询:

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

括号内的子查询返回两列:A_ID 和 ud(每个 A_ID 的不同 dNum 值的计数)。但是,WHERE IN 子句期望单个列来与 A_ID 进行比较。因此,我们需要修改子查询以仅返回 A_ID 列:

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,可用于在 WHERE IN 子句中进行比较。此外,我们可以删除 COUNT(DISTINCT dNum) AS ud 子句,因为它不再需要仅选择前 0.1% 的 A_ID 值。

此修改后的查询应解决指定的错误并允许您检索所需的结果。请记住,在 WHERE IN 子句中使用子查询时,请确保子查询仅返回比较所需的列。

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

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