PostgreSQL inconsistência consulta

votos
2

Estou tentando executar este comando 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) 
; 

Quando eu fizer isso, eu recebo o seguinte erro:

    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.

Eu tentei acrescentando: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC ao final da consulta, sem sucesso.

ATUALIZAR:

Eu também tentei isso:

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) 
; 

Mas eu ainda obter o mesmo erro.

THX

Publicado 03/01/2009 em 23:22
fonte usuário
Em outras línguas...                            


4 respostas

votos
0

Eu realmente não sou um especialista, mas o meu entendimento de que a mensagem é que PostgreSQL Compains sobre não ser capaz de lidar com qualquer page.page_namespace <=3ou pagelinks.pl_namespace <=3. Para fazer uma comparação como o que você precisa ter uma ordem definida e talvez um desses campos não é um campo numérico padrão. Ou talvez haja algum problema com inteiro vs. ponto flutuante - por exemplo, a questão se "3.0 = 3" não é realmente fácil de responder uma vez que a representação de ponto flutuante de 3,0 é muito provavelmente não exatamente 3.

Tudo apenas conjecturas, mas eu tenho certeza que esses dois <=s são seu problema.

Respondeu 03/01/2009 em 23:46
fonte usuário

votos
0

Bem, eu não sei o esquema (*) que você usa, mas a mensagem de erro parece claro. Uma de suas colunas é do tipo REGISTRO e não há nenhum operador a pedir RECORD.But algumas partes de sua consulta como <= requer tal operador de ordenação. Usando ORDER BY é improvável para ajudar uma vez que o cerne do problema é a falta de um operador a ordem ...

(*) A partir de suas outras perguntas, eu assumo o seu esquema é Wikipedia despejo página no http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz correto?

Respondeu 03/01/2009 em 23:51
fonte usuário

votos
12

Eu não tenho verificado qualquer documentação, mas o fato de que você tem a sua GROUP BYexpressão entre parênteses parece incomum para mim. O que acontece se você não usar parênteses aqui?

Respondeu 04/01/2009 em 00:01
fonte usuário

votos
-1

i tem algum erro. mas eu encontrei esta página, http://www.w3schools.com/sql/sql_groupby.asp é fácil, você deve agrupar sem colchetes, por exemplo:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) a correcta é GROUP BY page.page_namespace, pagelinks.pl_namespace

saudações!!

Respondeu 04/01/2012 em 16:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more