Inconsistencia de consulta PostgreSQL
-
03-07-2019 - |
Pregunta
Estoy tratando de ejecutar 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)
;
Cuando lo hago, aparece el siguiente error:
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.
He intentado agregar: ORDER BY (page.page_namespace, pagelinks.pl_namespace) ASC al final de la consulta sin éxito.
ACTUALIZACIÓN:
También probé esto:
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)
;
Pero sigo teniendo el mismo error.
Thx
Solución
No he verificado ninguna documentación, pero el hecho de que tenga su GROUP BY
expresión entre paréntesis me parece inusual. ¿Qué sucede si no usas paréntesis aquí?
Otros consejos
No soy realmente un experto, pero entiendo ese mensaje es que PostgreSQL se compara con no poder manejar page.page_namespace <=3
o pagelinks.pl_namespace <=3
. Para hacer una comparación como esa, necesita tener un orden definido y quizás uno de estos campos no sea un campo numérico estándar. O tal vez hay algún problema con el número entero frente al punto flotante, p. la pregunta si " 3.0 = 3 " en realidad no es tan fácil de responder ya que la representación de punto flotante de 3.0 probablemente no sea exactamente 3.
Todo son conjeturas, pero estoy bastante seguro de que esos dos <=
s son tu problema.
Bueno, no sé el esquema (*) que usa, pero el mensaje de error parece claro. Una de sus columnas es de tipo RECORD y no hay operador para ordenar RECORD. Pero algunas partes de su consulta, como < = requiere dicho operador de pedido. Es improbable que el uso de ORDER BY ayude, ya que el problema es la falta de un operador para ordenar ...
(*) De sus otras preguntas, supongo que su esquema es el volcado de la página de Wikipedia en http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz ¿Correcto?
tengo algún error. pero encontré esta página http://www.w3schools.com/sql/sql_groupby.asp es fácil, debes agrupar sin paréntesis por ejemplo:
GROUP BY (page.page_namespace, pagelinks.pl_namespace) lo correcto es GROUP BY page.page_namespace, pagelinks.pl_namespace
saludos !!