我正在尝试执行此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) 
; 

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

THX

有帮助吗?

解决方案

我没有检查过任何文档,但是你的括号中有GROUP BY表达式的事实对我来说并不常见。如果你不在这里使用括号会怎么样?

其他提示

我不是真正的专家,但我对该消息的理解是PostgreSQL无法处理page.page_namespace <=3pagelinks.pl_namespace <=3。要进行比较,您需要定义一个订单,并且这些字段中的一个可能不是标准数字字段。或者整数与浮点有一些问题 - 例如问题是否<!>“3.0 = 3 <!>”;并不是那么容易回答,因为3.0的浮点表示很可能不完全是3。

所有这些只是猜测,但我很确定这两个<=是你的问题。

好吧,我不知道你使用的架构(*),但错误信息似乎很清楚。您的一个列是 RECORD 类型,没有列运算符命令RECORD.But您的查询的某些部分,如<!> lt; =需要这样的排序运算符。使用ORDER BY不太可能有所帮助,因为问题的关键是缺乏运营商订购......

(*)根据您的其他问题,我假设您的架构是 http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz 正确吗?

我有一些错误。 但我找到了这个页面, http://www.w3schools.com/sql/sql_groupby.asp 这很容易,你必须组成没有括号 例如:

GROUP BY(page.page_namespace,pagelinks.pl_namespace) 正确的是  GROUP BY page.page_namespace,pagelinks.pl_namespace

问候!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top