Несогласованность запросов PostgreSQL - PullRequest
2 голосов
/ 04 января 2009

Я пытаюсь выполнить эту команду 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 в конец запроса без успеха.

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

Ответы [ 4 ]

12 голосов
/ 04 января 2009

Я не проверял никакой документации, но тот факт, что у вас есть выражение GROUP BY в скобках, выглядит для меня необычно. Что произойдет, если вы не будете использовать здесь скобки?

0 голосов
/ 04 января 2012

у меня ошибка но я нашел эту страницу, http://www.w3schools.com/sql/sql_groupby.asp это легко, нужно группировать без скобок например:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) правильный GROUP BY page.page_namespace, pagelinks.pl_namespace

привет !!

0 голосов
/ 04 января 2009

Ну, я не знаю схемы (*), которую вы используете, но сообщение об ошибке кажется ясным. Один из ваших столбцов имеет тип RECORD , и нет оператора для заказа RECORD. Но для некоторых частей вашего запроса, например <=, требуется такой оператор упорядочения. Использование ORDER BY вряд ли поможет, поскольку суть проблемы заключается в отсутствии оператора для заказа ... </p>

(*) Из других ваших вопросов я предполагаю, что ваша схема - дамп страницы Википедии в http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz Правильно?

0 голосов
/ 04 января 2009

Я на самом деле не эксперт, но мое понимание этого сообщения таково, что PostgreSQL не может справиться ни с page.page_namespace <=3, ни с pagelinks.pl_namespace <=3. Чтобы сделать такое сравнение, вам нужно определить порядок, и, возможно, одно из этих полей не является стандартным числовым полем. Или, может быть, есть некоторая проблема с целым числом или с плавающей точкой - например, на вопрос «3.0 = 3» не так-то просто ответить, поскольку представление с плавающей запятой в 3.0, скорее всего, не совсем 3.

Все просто догадки, но я почти уверен, что эти два <= твои проблемы.

...