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