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_ID
和 ud
。 IN
运算符无法处理此问题;它需要单个列来与外部查询中的 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中文网其他相关文章!