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

Sửa lỗi:“Các SELECT ở bên trái và bên phải của UNION không có cùng số cột kết quả” trong SQLite

Nếu bạn nhận được “Lỗi:đang chuẩn bị, các câu CHỌN ở bên trái và bên phải của UNION không có cùng số cột kết quả…” khi cố gắng sử dụng UNION trong SQLite, đó là vì một trong các SELECT các câu lệnh trả về nhiều cột hơn các cột khác.

Khi bạn sử dụng UNION toán tử, cả SELECT các câu lệnh phải trả về cùng một số cột.

Để khắc phục sự cố này, hãy đảm bảo 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ã SQL gây ra lỗi:

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

Kết quả:

Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)

Đâ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
-----------
Ben        
Bill       
Cathy      
Ein        
Faye       
Jet        
Spike      
Warren     

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          Faye       
1          Warren     
2          Ben        
2          Jet        
3          Cathy      
3          Spike      
4          Cathy      
4          Ein        
5          Bill       
5          Warren     
6          Bill       

Hãy nhớ 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. Cách đưa Trường Bộ sưu tập Nước ngoài vào Con trỏ trong Ormlite

  2. Nhóm kết nối cho cơ sở dữ liệu '/data/data/msv_database.db' không thể cấp kết nối. Kết nối:0 hoạt động, 1 không hoạt động, 0 khả dụng

  3. Đóng không bao giờ được gọi một cách rõ ràng trên Cơ sở dữ liệu

  4. Bảng cơ sở dữ liệu Android SQLite không được tạo

  5. Làm cách nào để chọn một cột cụ thể từ cơ sở dữ liệu phòng được cung cấp một tham số cụ thể trong truy vấn phòng?