SELECT DISTINCT, ORDER BY, созданный Django, работает в MySQL и SQLite, а не в PostgreSQL - PullRequest
0 голосов
/ 28 января 2011

Я только что переключился с mysql на postgres (ура!), Но теперь на моем сервере postgres (только) я получаю сообщение об ошибке:

В списке выбора должны появиться выражения SELECT DISTINCT, ORDER BY

Это тот же запрос:

SELECT DISTINCT * FROM table ORDER BY '?'

Кстати, это запрос, автоматически сгенерированный django. В качестве альтернативы, есть ли способ заставить django отображать правильный sql?

Добавление

Оказывается, что по какой-то причине на моем рабочем сервере Postgres 8.4 Django устранял ошибку, а на моем сервере Devg 9.0 - нет. Я понятия не имею, было ли это связано с версиями Postgres или нет, но на самом деле это было с ошибками в Postgreses и НЕ в MySQL .

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Я ожидаю, что все платформы SQL, которые соответствуют стандартам SQL, вызовут аналогичную ошибку.

Подумайте об этом следующим образом.

CREATE TABLE test (
    id INTEGER NOT NULL,
    c CHAR(1) NOT NULL,
    PRIMARY KEY (id, c)
);

INSERT INTO test VALUES 
    (1, 'a'),
    (1, 'z'),
    (2, 'b');

SELECT * FROM test ORDER BY c;

id  c
--  -
1   a
2   b
1   z

Теперь подумайте, что означает следующий оператор.

SELECT DISTINCT id FROM test ORDER BY c;

Какое значение 'c' должно использовать БД для позиционирования 'id' 1 в порядке сортировки?Если он выбирает «а», то порядок «1,2».Если он выбирает «z», то порядок «2,1».

0 голосов
/ 28 сентября 2011

Как сказал @ Catcall , технически это утверждение недопустимо и бессмысленно в SQL.

Однако MySQL и SQLite позволяют вам делать SELECT DISTINCT id FROM test ORDER BY whatever, а PostgreSQL - нет.Это так просто.

MySQL и SQLite могут давать недетерминированные результаты, используя этот метод, я не уверен.

Однако, если вы упорядочиваете по '?', это должно бытьхорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...