0

データベース (フラグ) に、Y または NULL のいずれかが入力されたタイプ varchar(1) の列があります (これは、私のコントロールではありません)。

SQL Server では、クエリで昇順を実行すると、NULL が一番上に配置されます。この動作は、Oracle と DB2 で一貫しているべきですか?

代わりに、列に COALESCE を使用してクエリで null にならないようにすると、(テーブル スキャンなどによる) パフォーマンスの問題が発生する可能性がありますか?

編集

クエリは 3 つのデータベースすべてで一貫している必要があります。それ以外の場合はコードで処理する必要があるため、COALESCE 関数を使用することを考えています

編集

質問の両方の部分に対処し、役立つ回避策を提供してくれたので、答えとして Pax を選択しましたが、ここへのリンクを提供してくれた me.yahoo.com/a/P4tXrx に感謝します。

4

3 に答える 3

3

私は、DB2 Express と DB2 (少なくとも v8 まで) がこの節をサポートしていないことを知っています。NULLS FIRST

移植可能なソリューションが必要な場合は、次のようなものを選択する必要がある場合があります。

select * from tbl where fld is null
    union all select * from tbl where fld is not null

ユニオンの結果 (少なくとも DB2 では、他のものを確認する必要があります) は正しく順序付けられることが保証されていると思います。

返されるすべての行に対して関数を実行しているため、合体はパフォーマンスに影響を与えます。ただし、データベース内の行数によって異なります。

コードで 2 つのクエリを 2 つの異なるレコード セットに実行し、それらを順番に処理する必要がある場合があります。

UNION ALLEDIT:SQL標準を確認したところ、aで結合されたクエリがシーケンス化されていることは保証されていません。それらが混在している可能性があります。したがって、上記のように 2 つの異なるクエリを実行するコードに頼る必要があるようです。

于 2008-11-26T01:04:03.230 に答える
1

SQL Server では、クエリで昇順を実行すると、NULL が一番上に配置されます。この動作は、Oracle と DB2 で一貫しているべきですか?

どうやら、これは標準の比較的新しいものです。

SQL 標準のコア機能では、Null の既定の並べ替え順序が明示的に定義されていません。SQL:2003 拡張機能 T611「基本的な OLAP 操作」を使用すると、ORDER BY リストの NULLS FIRST または NULLS LAST 句をそれぞれ使用して、すべてのデータ値の前または後に null を並べ替えることができます。ただし、すべての DBMS ベンダーがこの機能を実装しているわけではありません。この機能を実装していないベンダーは、DBMS での Null 並べ替えに別の処理を指定する場合があります。

于 2008-11-26T01:05:56.910 に答える
0

オラクルでは、これを行うことができます:

ORDER BY value NULLS FIRST 

また

ORDER BY value NULLS LAST

SQL Server で試す

于 2008-11-26T00:48:33.963 に答える