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