2009-01-03 144 views
2

我试图执行SQL命令:PostgreSQL的查询不一致

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_namespace,pagelinks.pl_namespace)ASC到查询结尾没有成功。

UPDATE:

我也试过这样:

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

+0

发布您的模式和一个示例SQL数据文件,否则,不容易看到发生了什么。 – bortzmeyer 2009-01-03 22:57:59

+0

[3]:http://upload.wikimedia.org/wikipedia/commons/4/41/Mediawiki-database-schema.png – 2009-01-04 00:28:49

回答

12

我还没有检查过任何文档,但事实上,你有你的GROUP BY表达式在括号里对我来说看起来并不常见。如果在这里不使用括号会发生什么?

0

我不是一个真正的专家,但我认为消息的理解是,PostgreSQL的孔潘有关无法处理任何page.page_namespace <=3pagelinks.pl_namespace <=3。为了进行比较,您需要定义一个订单,也许这些字段中的一个不是标准数字字段。或者也许在整数与浮点之间存在一些问题 - 例如由于3.0的浮点表示很可能不完全是3,所以“3.0 = 3”这个问题不是那么容易回答的。

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

+0

从您的更新中可以看到,这不是问题所在。 Thx无论如何 – 2009-01-03 23:05:20

0

嗯,我不知道你使用的模式(*),但错误信息似乎很清楚。其中一列是RECORD,并且没有操作员可以订购RECORD。但是您的查询的某些部分(如< =)需要这样的订购操作员。使用ORDER BY不太可能有所帮助,因为问题的症结在于缺少订单的操作员...

(*)从您的其他问题,我假设您的模式是维基百科页面转储http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz正确吗?

+0

正确。但它不仅仅是那个文件。 – 2009-01-03 23:03:33

+0

那么,正如我所说的,发布DDL(CREATE TABLE请求)和一个数据文件的样本。否则,这太难以调试。 – bortzmeyer 2009-01-03 23:05:12

-1

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

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

问候!