Question

J'essaie d'exécuter cette commande 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) 
; 

Lorsque je le fais, le message d'erreur suivant s'affiche:

    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.

J'ai essayé d'ajouter: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC jusqu'à la fin de la requête sans succès.

MISE À JOUR:

J'ai aussi essayé ceci:

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

Mais je reçois toujours la même erreur.

Thx

Était-ce utile?

La solution

Je n'ai vérifié aucune documentation, mais le fait que votre expression GROUP BY soit entre parenthèses me semble inhabituel. Que se passe-t-il si vous n'utilisez pas de parenthèses ici?

Autres conseils

Je ne suis pas vraiment un expert, mais si je comprends bien ce message, PostgreSQL ™ recommande de ne pas être en mesure de gérer page.page_namespace <=3 ou pagelinks.pl_namespace <=3. Pour faire une comparaison de ce type, vous devez définir un ordre et peut-être que l'un de ces champs n'est pas un champ numérique standard. Ou peut-être y a-t-il un problème entre nombre entier et virgule flottante - par exemple. la question si " 3.0 = 3 " Ce n’est pas si facile de répondre, car la représentation en virgule flottante de 3.0 n’est probablement pas exactement 3.

Tous des suppositions, mais je suis à peu près sûr que ces deux <= s sont votre problème.

Eh bien, je ne connais pas le schéma (*) que vous utilisez, mais le message d'erreur semble clair. Une de vos colonnes est de type ENREGISTREMENT et il n'y a pas opérateur pour commander RECORD.Mais certaines parties de votre requête, comme < =, nécessitent un tel opérateur. Il est peu probable que l’utilisation de ORDER BY aide, car le nœud du problème est l’absence d’un opérateur pour commander ...

(*) Parmi vos autres questions, je suppose que votre schéma est un vidage de page Wikipedia dans http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz Correct?

j’ai une erreur. mais j'ai trouvé cette page, http://www.w3schools.com/sql/sql_groupby.asp c'est facile, vous devez grouper sans crochets par exemple:

GROUP BY (page.page_namespace, pagelinks.pl_namespace) le correct est  GROUP BY page.page_namespace, pagelinks.pl_namespace

salutations !!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top