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_ID
和 COUNT(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中文网其他相关文章!