Несогласованность запросов PostgreSQL
-
03-07-2019 - |
Вопрос
Я пытаюсь выполнить эту 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.
Я пробовал добавлять : УПОРЯДОЧИТЬ ПО (page.page_namespace, pagelinks.pl_namespace) ASC до конца запрос выполнен безуспешно.
Обновить:
Я тоже пробовал это:
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)
;
Но я все равно получаю ту же ошибку.
Спасибо
Решение
Я не проверял никакой документации, но тот факт, что у вас есть ваш GROUP BY
выражение в круглых скобках выглядит для меня необычно.Что произойдет, если вы не будете использовать здесь круглые скобки?
Другие советы
Я на самом деле не эксперт, но мое понимание этого сообщения заключается в том, что PostgreSQL жалуется на то, что не может обработать ни то, ни другое page.page_namespace <=3
или pagelinks.pl_namespace <=3
.Чтобы провести подобное сравнение, вам нужно определить порядок, и, возможно, одно из этих полей не является стандартным числовым полем.Или, может быть, есть какая-то проблема с целым числом противплавающая точка - напримерна вопрос, если "3.0 = 3", на самом деле не так просто ответить, поскольку представление 3.0 с плавающей запятой, скорее всего, не точно равно 3.
Все это только догадки, но я почти уверен, что эти двое <=
s - это ваша проблема.
Ну, я не знаю схему (*), которую вы используете, но сообщение об ошибке кажется ясным.Один из ваших столбцов имеет тип ЗАПИСЬ и нет оператора для заказа ЗАПИСИ.Но некоторые части вашего запроса, такие как <= требуется такой оператор упорядочивания.Использование ORDER BY вряд ли поможет, поскольку суть проблемы заключается в отсутствии оператора для оформления заказа...
(*) Исходя из ваших других вопросов, я предполагаю, что ваша схема представляет собой дамп страницы Википедии в http://download.wikimedia.org/enwiki/latest/enwiki-latest-page.sql.gz Правильно?
у меня какая-то ошибка.но я нашел эту страницу, http://www.w3schools.com/sql/sql_groupby.asp это просто, вы должны группировать без скобок например:
ГРУППИРОВАТЬ ПО (page.page_namespace, pagelinks.pl_namespace) правильно будет ГРУППИРОВАТЬ ПО page.page_namespace, pagelinks.pl_namespace
приветствую вас!!