【问题标题】:PostgreSQL query inconsistencyPostgreSQL 查询不一致
【发布时间】:2010-09-29 10:16:02
【问题描述】:

我正在尝试执行这条 SQL 命令:

SELECT page.page_namespace, pagelinks.pl_namespace, COUNT(*) 
    FROM page, pagelinks
    WHERE 
        (page.page_namespace <=3 OR page.page_namespace = 12 
            OR page.page_namespace = 13
        ) 
        AND 
        (pagelinks.pl_namespace <=3 OR pagelinks.pl_namespace = 12 
            OR pagelinks.pl_namespace = 13
        )
        AND 
        (page.page_is_redirect = 0)
        AND 
        pagelinks.pl_from = page.page_id 
    GROUP BY (page.page_namespace, pagelinks.pl_namespace) 
; 

当我这样做时,我收到以下错误:

    ERROR:  could not identify an ordering operator for type record
    HINT:  Use an explicit ordering operator or modify the query.

    ********** Error **********

    ERROR: could not identify an ordering operator for type record
    SQL state: 42883
    Hint: Use an explicit ordering operator or modify the query.

我尝试在查询末尾添加:ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC,但没有成功。

更新:

我也试过这个:

SELECT page.page_namespace, pagelinks.pl_namespace, COUNT(*) 
    FROM page, pagelinks
    WHERE pagelinks.pl_from = page.page_id 
    GROUP BY (page.page_namespace, pagelinks.pl_namespace) 
; 

但我仍然遇到同样的错误。

谢谢

【问题讨论】:

标签: sql postgresql rdbms wikipedia


【解决方案1】:

我没有检查任何文档,但您在括号中包含 GROUP BY 表达式这一事实对我来说似乎很不寻常。如果这里不使用括号会怎样?

【讨论】:

  • 我刚刚测试过,是的,你是对的,括号产生了这个奇怪的错误信息。
【解决方案2】:

我并不是真正的专家,但我对该消息的理解是 PostgreSQL 抱怨无法处理 page.page_namespace &lt;=3pagelinks.pl_namespace &lt;=3。要进行这样的比较,您需要定义一个顺序,并且这些字段之一可能不是标准的数字字段。或者整数与浮点可能存在一些问题——例如“3.0 = 3”这个问题并不是真的那么容易回答,因为 3.0 的浮点表示很可能不完全是 3。

一切都只是猜测,但我很确定这两个 &lt;=s 是你的问题。

【讨论】:

  • 从我的更新中可以看出,这不是问题所在。无论如何谢谢
【解决方案3】:

好吧,我不知道您使用的架构 (*),但错误消息似乎很清楚。您的一列是RECORD 类型,并且没有操作符来订购RECORD。但是您的查询的某些部分(例如

(*) 根据您的其他问题,我假设您的架构是http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz 中的维基百科页面转储,对吗?

【讨论】:

  • 好吧,正如我所说,发布 DDL(CREATE TABLE 请求)和数据文件示例。否则,调试起来太困难了。
  • 实际上,没有一列属于 RECORD 类型。这到底是什么意思?
  • 实际上,您的链接似乎对我不起作用,AKA 页面将无法加载。谢谢!
【解决方案4】:

我有一些错误。 但我找到了这个页面, http://www.w3schools.com/sql/sql_groupby.asp 很简单,你必须分组不带括号 例如:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) 正确的是 按 page.page_namespace、pagelinks.pl_namespace 分组

你好!!

【讨论】:

  • 这个在两年前就已经清除了,现在仍然如此。您的回答没有添加任何内容。
猜你喜欢
  • 2016-06-10
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多