我有一个查询
SELECT COUNT(*) AS "CNT",
imei
FROM devices
执行得很好。我想使用WHERE语句进一步限制查询。 (人道的)逻辑下一步是随后修改查询:
SELECT COUNT(*) AS "CNT",
imei
FROM devices
WHERE CNT > 1
但是,这会导致错误消息 ORA-00904:“CNT”:无效的标识符。出于某种原因,将查询包装在另一个查询中会产生所需的结果:
SELECT *
FROM (SELECT COUNT(*) AS "CNT",
imei
FROM devices
GROUP BY imei)
WHERE CNT > 1
为什么Oracle在第二个查询中不能识别别名“CNT”?
最佳答案
简单的答案是AS
子句定义了将在结果中调用的列,这是与查询本身不同的作用域。
在您的示例中,使用HAVING
子句最有效:
SELECT COUNT(*) AS "CNT",
imei
FROM devices
GROUP BY imei
HAVING COUNT(*) > 1
关于sql - 了解Oracle别名-为什么除非包装在第二个查询中,否则在查询中为什么不能识别别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153778/