Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khắc phục “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong MySQL

Nếu bạn nhận được “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong một truy vấn MySQL, có thể là do số lượng cột được trả về bởi mỗi SELECT tuyên bố khác nhau.

Ví dụ:SELECT đầu tiên câu lệnh có thể trả về hai cột, nhưng SELECT thứ hai câu lệnh trả về ba.

Để khắc phục sự cố này, hãy đảm bảo cả SELECT các câu lệnh trả về cùng một số cột.

Ví dụ về Lỗi

Dưới đây là một ví dụ về mã tạo ra lỗi:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Kết quả:

ERROR 1222 (21000): The used SELECT statements have a different number of columns

Đây, SELECT đầu tiên câu lệnh trả về một cột (TeacherName ), nhưng SELECT thứ hai câu lệnh trả về hai cột (StudentIdStudentName ).

Giải pháp

Cách khắc phục sự cố này là đảm bảo cả SELECT các câu lệnh trả về cùng một số cột

Vì vậy, bằng cách sử dụng ví dụ trên, chúng tôi có thể xóa cột thừa khỏi SELECT thứ hai của chúng tôi tuyên bố:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Kết quả:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+

Hoặc chúng ta có thể thêm một cột khác vào SELECT đầu tiên tuyên bố:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Kết quả:

+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
+-----------+-------------+

Hãy lưu ý rằng bạn có thể nhận được các kết quả khác nhau tùy thuộc vào tùy chọn bạn chọn. Điều này là do UNION trả về các hàng riêng biệt theo mặc định. Khi chúng tôi thêm một cột khác, có khả năng một hàng trùng lặp trước đây trở thành một hàng duy nhất, tùy thuộc vào giá trị trong cột bổ sung.

Chúng tôi cũng có thể sử dụng UNION ALL , trả về các giá trị trùng lặp:

SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;

Kết quả:

+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
|         6 | Bill        |
+-----------+-------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Xem với Truy vấn con trong Giới hạn Mệnh đề FROM

  2. Cách tạo và triển khai cơ sở dữ liệu Azure cho MySQL Server bằng Azure Portal và Workbench

  3. Kích thước của cột int (11) trong mysql tính bằng byte là bao nhiêu?

  4. Các mẫu ngẫu nhiên đơn giản từ cơ sở dữ liệu Sql

  5. Làm thế nào để đảo ngược kỹ sư một cơ sở dữ liệu trong MySQL Workbench