Postgresで、order by節なしで最初のクエリを実行するだけの逆のSQLクエリを実行したいとします。SELECT文の最初の逆順
は、だからあなたのクエリだった場合:
SELECT * FROM users
その後
SELECT * FROM users ORDER BY <something here to make it exactly the reverse of before>
それはちょうどこのことだろうか?
ORDER BY Desc
Postgresで、order by節なしで最初のクエリを実行するだけの逆のSQLクエリを実行したいとします。SELECT文の最初の逆順
は、だからあなたのクエリだった場合:
SELECT * FROM users
その後
SELECT * FROM users ORDER BY <something here to make it exactly the reverse of before>
それはちょうどこのことだろうか?
ORDER BY Desc
あなたはあなたが決定論的順序で行になるだろう間違った仮定に構築されています
SELECT * FROM users;
、あなたが本当に任意で何を得ます。 Postgresは、見た目に合った行を返します。一般に単純なクエリの場合、通常は行が入力された順番である物理ストレージの順に表示されます。しかし、保証はありません。例えば、バックグラウンド・プロセスが行を並べ替えるときなど、2つの呼び出しの間でいつでも変更することができます(VACUUM
など)。または、より複雑な照会では、索引または結合に従って行を戻すことがあります。長い話が短い:ORDER BY
と指定しない限り、リレーショナルデータベースのテーブル行には、がありません。です。
SELECT * FROM users
ORDER BY ctid DESC;
ctid
は、物理的な意味内部タプルIDである:これはあなたの逆の順序になるだろう、あなたは物理ストレージのために、上記の単純なクエリから行を取得と仮定して、言った
注文。関連:ここ
あなたが正しいときに投票したことが奇妙な種類ですか? –
@muistooshort:確かに奇妙です。私はそれが答えに関係しているとは思わない。 –
がTSQLソリューションで、THIDは、あなたにはありません、それは容易ではないのpostgres
select * from (
SELECT *, row_number() over(order by (select 1)) rowid
FROM users
) x
order by rowid desc
TSQLとPostgreSQLとは何が関係していますか? –
ウィンドウ関数はSQL標準の一部であり、Postgresで長年サポートされているため、答えはT-SQL固有のものではありません。しかし、Postgresでは 'row_number()over()'を使うことができます。 –
でそれを行う方法のアイデアを与えるかもしれません*最初の注文はないので*;オーダーが定義されていない(ORDER BY句なし) – wildplasser