2016-12-21 15 views
4

なぜ& & PostgreSQL 9.4の演算子が2つの配列の重複をチェックするために使用されますか、結果の順序を変更しますか?&&演算子結果の順序を変更する

は私が

Select * FROM "View_Student_Plan" WHERE "ClassID" && ARRAY[53]:: bigint[] 

私の見解は、入場日時順にソートされたクエリを持っています。私は

Select * FROM "View_Student_Plan" 

を使用しかし、私は、クエリとの残りの部分を添付するとき、それは結果の順序を変更した場合 それは、正常に動作します。

私はどこの節でStudent_Name like 'P%',のような他の条件を使用しましたが、select文で与えられた結果の順序には影響しません。それではどうしたらいいのですか"ClassID" && ARRAY[53]:: bigint[]

+0

結果の順序が必要な場合は、クエリに 'ORDER BY'節を追加する必要があります。明示的な順序のないクエリまたはビューの順序は考慮しないでください。 – clemens

+0

@macmoonshineしかし、 "view ..."からquery select *を実行すると、正しく動作します。 –

+1

@ Pooja-Gそうかもしれないし、明日はそうではないかもしれない。この誤った仮定は非常に強くsqliteでは、これらのバグが再浮上するように選択順序を逆転させるプラグマを持っています。仕様によって順序付けられていないものは、注文するものに頼ることはできません。 – keltar

答えて

6

どのRDBMSでも、出力の順序はデフォルトでは設定されておらず、毎回違うソートが可能です!

句を使用して、特定の注文(E.G。入会時期)を強制する唯一の方法は、インデックスで並べ替えることができます。

EDIT:この句は、クエリの最後であるべきなあなたのコメントにについては、VIEWORDER BY句を含めることはできません、それは、それ以外の場合は無視することができ、効果的ではありません。
E.G.

SELECT * FROM YourView 
ORDER BY....--THIS WILL WORK 

それはビュー内でそのようなものだ:

SELECT * 
FROM (SELECT * FROM .... 
     ORDER BY ..) 

ので、オプティマイザはこれを無視して自由です。

+0

だけで注文しています。 "View_Student_Plan"は私のビューで、このビューのクエリにはorder by句が含まれています。 –

+1

@ Pooja-G 'order by 'はクエリの最後にある必要があります。それ以外の場合は無視されます。 – Magnus

+0

しかし、クエリselect *を「view ...」から実行すると、正常に動作します。@ Magnus –

関連する問題