Domanda

Sto cercando di eseguire questo 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 lo faccio, ricevo il seguente errore:

    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.

Ho provato ad aggiungere: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC alla fine della query senza successo.

UPDATE:

Ho anche provato questo:

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

Ma ho ancora lo stesso errore.

Thx

È stato utile?

Soluzione

Non ho controllato alcuna documentazione, ma il fatto che tu abbia la tua espressione GROUP BY tra parentesi mi sembra insolito. Cosa succede se non usi le parentesi qui?

Altri suggerimenti

Non sono davvero un esperto, ma la mia comprensione di quel messaggio è che PostgreSQL si rammarica di non essere in grado di gestire page.page_namespace <=3 o pagelinks.pl_namespace <=3. Per fare un confronto del genere è necessario avere un ordine definito e forse uno di questi campi non è un campo numerico standard. O forse c'è qualche problema con numero intero vs. virgola mobile - ad es. la domanda se " 3.0 = 3 " non è così facile rispondere poiché la rappresentazione in virgola mobile di 3.0 probabilmente non è esattamente 3.

Tutto solo congetture, ma sono abbastanza sicuro che quei due <= siano il tuo problema.

Beh, non conosco lo schema (*) che usi ma il messaggio di errore sembra chiaro. Una delle tue colonne è di tipo RECORD e non esiste operatore per ordinare RECORD. Ma alcune parti della tua query come < = richiedono un tale operatore di ordinazione. È improbabile che utilizzare ORDER BY sia di aiuto poiché il nocciolo del problema è la mancanza di un operatore che ordina ...

(*) Dalle altre tue domande, suppongo che il tuo schema sia il dump della pagina Wikipedia in http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz Corretto?

ho qualche errore. ma ho trovato questa pagina, http://www.w3schools.com/sql/sql_groupby.asp è facile, devi raggruppare senza parentesi ad esempio:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) il corretto è  GROUP BY page.page_namespace, pagelinks.pl_namespace

saluti !!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top