PostgreSQL:在 WHERE 子句中搜索时列不存在

Posted

技术标签:

【中文标题】PostgreSQL:在 WHERE 子句中搜索时列不存在【英文标题】:PostgreSQL: column does not exist when searched in WHERE clause 【发布时间】:2016-01-29 15:23:35 【问题描述】:

所以,我有这个小 SQL 查询:

SELECT 
  COUNT( distinct  (customerid)) AS cs,  prod_id 
FROM 
 (orderlines JOIN orders ON (orderlines.orderid=orders.orderid)) AS table_1  
WHERE table_1.cs= 1
GROUP BY table_1.prod_id
ORDER BY cs ASC

这应该做的是计算不同的 customerid,并返回一个表,其中只包含只有不同的 customerid 的条目。

执行此操作时出现以下错误:

ERROR:  column table_1.cs does not exist
LINE 6: WHERE table_1.cs= 1
          ^
*********Error********** 

ERROR: column table_1.cs does not exist
SQL state: 42703
Character: 156

当我在这里明确定义时,它声称 cs 列不存在:

SELECT 
      COUNT( distinct  (customerid)) AS cs,  prod_id 

【问题讨论】:

您使用有子句 GROUP BY .. HAVING COUNT( distinct (customerid))=1 过滤聚合结果 【参考方案1】:

您不能在 WHERE 子句中引用选择列表中定义的别名。您可以使用 HAVING 子句或使用子选择 ..

通过子选择,您可以安排这样的事情:

SELECT * FROM (
SELECT 
  COUNT( distinct  (customerid)) AS cs,  prod_id 
FROM 
 (orderlines JOIN orders ON (orderlines.orderid=orders.orderid))
GROUP BY table_1.prod_id) AS table_1  
WHERE cs= 1
ORDER BY cs ASC

【讨论】:

以上是关于PostgreSQL:在 WHERE 子句中搜索时列不存在的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 在发送参数时在 where 中询问“group by”子句

PostgreSQL WHERE 子句

PostgreSQL WHERE 子句

PostgreSQL 函数不适用于 WHERE 子句

在 PostgreSQL 的 WHERE 子句中使用函数结果

Postgresql 包含在 where 子句中