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
のいずれかを処理できないことを強調しているということです。このような比較を行うには、順序を定義する必要があり、これらのフィールドの1つは標準の数値フィールドではない可能性があります。または、整数と浮動小数点の問題があるかもしれません-例えば質問if <!> quot; 3.0 = 3 <!> quot; 3.0の浮動小数点表現はほとんどの場合正確に3ではないため、答えるのはそれほど簡単ではありません。
すべて当て推量ですが、これら2つの<=
が問題であると確信しています。
まあ、私はあなたが使用しているスキーマ(*)を知りませんが、エラーメッセージははっきりしているようです。列の1つは RECORD タイプであり、レコードを注文する演算子。ただし、<!> lt; =などのクエリの一部には、このような順序演算子が必要です。問題の核心は、注文する演算子がないことであるため、ORDER BYを使用しても助けになりそうにありません...
(*)他の質問から、スキーマは http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz 正しいですか
iにエラーがあります。 しかし、私はこのページを見つけました、 http://www.w3schools.com/sql/sql_groupby.asp 簡単です、括弧なしでグループ化する必要があります 例:
GROUP BY(page.page_namespace、pagelinks.pl_namespace) 正しいのは GROUP BY page.page_namespace、pagelinks.pl_namespace
ご挨拶!!