0

UNION された 2 つの SELECT ステートメントで構成される SQL クエリがあります。個別に実行すると、最初の SELECT は 10 レコードを返し、2 番目の SELECT は 1 レコードを返すため、2 つの SELECT を UNION すると、11 レコードが返されると予想されますが、そうではなく、9 レコードしか取得していません。

SQL の性質上、実際にここに投稿することはできませんが、5 つのテーブルにわたる多数の JOINS で構成されています。返されるものはすべて正しく有効です。

2 つの SELECT ステートメントを UNION するときにこの問題が発生するのを見た人がいるかどうか、また、原因について何かアドバイスがあるかどうか、または正しい方向に私を向けているかどうか、ありがとう.

4

3 に答える 3

3

UNIONはデフォルトで重複を削除します。重複が削除されないようにするには、UNION ALLを使用する必要があります。

ドキュメントの引用:

UNION のデフォルトの動作では、重複する行が結果から削除されます。オプションの DISTINCT キーワードは、重複行の削除も指定するため、デフォルト以外の効果はありません。オプションの ALL キーワードを使用すると、重複行の削除は行われず、結果にはすべての SELECT ステートメントから一致するすべての行が含まれます。

于 2013-03-22T10:31:15.260 に答える
0

デフォルトでは、Oracle はユニオンの結果に暗黙の distinct 句を適用します。個別のクエリの結果に共通のアイテムが含まれているかどうかを確認することができます。

この動作が望ましくない場合は、代わりに UNION ALL 句を使用する必要があります。

于 2013-03-22T10:30:07.363 に答える
0

UNION ALLのみの代わりに使用してみてくださいUNION。UNION は個別の行のみを返します。これをチェックしてください

于 2013-03-22T10:30:11.160 に答える