Khi sử dụng UNION
trong MariaDB, bạn có thể gặp lỗi sau:“ERROR 1222 (21000):Các câu lệnh SELECT được sử dụng có một số cột khác nhau”.
Lỗi này xảy ra khi số cột được trả về bởi mỗi SELECT
tuyên bố khác nhau.
Cách khắc phục điều này là đảm bảo rằng 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 (StudentId
và StudentName
).
Giải pháp
Giải pháp 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;
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;
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;
Điều này cũng có thể trả về các kết quả khác nhau cho các ví dụ khác.