我刚刚从mysql切换到postgres(yay!)但现在在我的postgres服务器上(仅限)我收到的错误是:
SELECT DISTINCT,ORDER BY表达式必须出现在选择列表
中这是相同的查询:
SELECT DISTINCT * FROM table ORDER BY '?'
BTW这是由django自动生成的查询。或者,任何方式让django实际呈现正确的sql?
事实证明,无论出于何种原因,使用我的Postgres 8.4生产服务器,Django正在消除错误,而使用我的Postgres 9.0开发服务器却没有。我不知道它是否与Postgres版本有关,但事实上它在Postgreses中都是错误而在MySQL中没有错误。
答案 0 :(得分:2)
我希望所有符合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;
dbms使用哪个'c'值来排序'id'1在排序顺序中?如果选择“a”,则订单为“1,2”。如果它选择'z',则订单为'2,1'。
答案 1 :(得分:0)
作为@Catcall said,从技术上讲,这种说法在SQL中是非法且无意义的。
但是,MySQL和SQLite允许您执行SELECT DISTINCT id FROM test ORDER BY whatever
,而PostgreSQL则不允许。{1}}就这么简单。
MySQL和SQLite可能会使用此方法产生非确定性结果,我不确定。
但是,如果您按'?'
订购,则应该没问题。