SQL子查询选择列表限制
当遇到错误“当子查询未以EXISTS开头时,选择列表中只能指定一个表达式”时,表示子查询的返回值存在问题。在嵌套于WHERE IN子句中的子查询中,务必确保只返回一列,以便与IN的另一侧进行比较。
提供的查询最初包含一个子查询,该子查询将A_ID和COUNT(DISTINCT dNum)作为ud返回。但是,在WHERE IN子句中,子查询只能返回单个列,该列将与主查询中的A_ID进行比较。此限制存在的原因是子查询的功能是返回一个值列表,以检查主查询中的A_ID是否与子查询结果中的任何值匹配。
为了解决这个问题,修改子查询以仅返回A_ID列,该列将与主查询WHERE IN子句中的A_ID进行比较。此外,可以在ORDER子句中使用排序来从子查询中选择行,而无需将COUNT作为列返回。
更正后的查询示例:
<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>
通过实施这些更改,查询可以正确返回所需的结果,同时遵守为WHERE IN比较返回单列的规则。
以上是为什么My SQL子查询返回'当子查询不带EXISTS引入时,选择列表中只能指定一个表达式”?的详细内容。更多信息请关注PHP中文网其他相关文章!