PostgreSQL查询不一致
-
03-07-2019 - |
题
我正在尝试执行此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 <=3
或pagelinks.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
问候!!