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 |
| モニッシュ |
| モニッシュ |