PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Rails 3-Abfrage:Fehler bei der Verwendung von „select“ mit „order“

Sie könnten die SQL mit diesem SQLFIDDLE testen .

Nur Sqlite und MySql unterstützen diese Verwendung, andere nicht.

Siehe dieses Postgresql-Dokument .

Eine Einschränkung dieser Funktion besteht darin, dass eine ORDER BY-Klausel, die auf das Ergebnis einer UNION-, INTERSECT- oder EXCEPT-Klausel angewendet wird, nur einen Ausgabespaltennamen oder eine Ausgabespaltennummer angeben kann, keinen Ausdruck.

Für Ihren Fall ist es nicht erforderlich, uniq zu verwenden, alle Benutzer-IDs sind bereits unterschiedlich. Warum versuchen Sie es also nicht mit:

User.order("email DESC").pluck(:id)

Unter der Annahme, dass die IDs dupliziert werden, könnten Sie uniq by ruby ​​anstelle von DB verwenden.

User.order("email DESC").pluck(:id).uniq

Dieses Skript wird niemals SQL mit „distinct“ generieren. Dieser uniq after pluck ist ein Array#uniq Methode.