sql >> データベース >  >> RDS >> Oracle

エラー「ORA-01789:クエリブロックの結果列の数が正しくありません」を修正しました

    Oracle Databaseで「ORA-01789:クエリブロックの結果列の数が正しくありません」というエラーが表示される場合は、UNIONなどの演算子を使用しようとしていることが原因である可能性があります。 、INTERSECT 、またはEXCEPT 複合クエリを実行しますが、SELECT 演算子のいずれかの側のステートメントは、異なる数の列を返します。

    これを修正するには、両方のクエリが同じ数の列を返すことを確認してください。

    エラーの例

    エラーを生成するコードの例を次に示します。

    SELECT EmployeeName FROM Employees
    UNION
    SELECT CustomerId, CustomerName FROM Customers;

    結果:

    ORA-01789: query block has incorrect number of result columns

    ここでは、UNIONを使用しています 複合クエリを作成する演算子。残念ながら、最初のクエリには1つの列しか含まれていませんが、2番目のクエリには2つの列が含まれているため、エラーが発生します。

    ソリューション

    この問題を修正する方法は、両方のクエリが同じ数の列を返すようにすることです。

    したがって、最初のSELECTに新しい列を追加することができます ステートメント:

    SELECT EmployeeId, EmployeeName FROM Employees
    UNION
    SELECT CustomerId, CustomerName FROM Customers;

    結果:

    EMPLOYEEID EMPLOYEENAME
    1 バート
    1 ミア
    2 1月
    2 Rohit
    3 Ava
    3 ピーター
    4 Ava
    4 Rohit
    5 監視
    6 監視
    7 監視

    または、2番目のクエリから列の1つを削除することもできます:

    SELECT EmployeeName FROM Employees
    UNION
    SELECT CustomerName FROM Customers;

    結果:

    EMPLOYEENAME
    Ava
    バート
    1月
    ミア
    モニッシュ
    ピーター
    Rohit

    使用するオプションによって、結果が大きく異なる可能性があることに注意してください。実際、上記の例では異なる結果が得られました。

    これは、UNION ALLが追加されていない限り、演算子は個別の行を返します キーワード。 「ID」列を含めると、「name」列のみを返した場合には表示されなかった行が区別されるようになりました。次に、「ID」列を除外すると、「name」列から一意の値を取得しました。

    実際に重複する値を返したい場合は、ALLを使用できます。 キーワード。

    したがって、最後の例を次のように変更できます。

    SELECT EmployeeName FROM Employees
    UNION ALL
    SELECT CustomerName FROM Customers;

    結果:

    EMPLOYEENAME
    バート
    1月
    Ava
    Rohit
    モニッシュ
    モニッシュ
    モニッシュ
    ミア
    Rohit
    ピーター
    Ava
    モニッシュ
    モニッシュ

    1. Dictionary <string、int>をストアドプロシージャT-SQLに渡します

    2. SQLServerのメッセージ529「データ型intからxmlへの明示的な変換は許可されていません」を修正しました

    3. SpringBootでPostgres接続が閉じられましたエラー

    4. SQL:結果の行を複数回繰り返し、行に番号を付けます