Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbaiki "ERROR 1222 (21000):Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda" saat menggunakan UNION di MySQL

Jika Anda mendapatkan “ERROR 1222 (21000):Pernyataan SELECT yang digunakan memiliki jumlah kolom yang berbeda” saat menggunakan UNION klausa dalam kueri MySQL, mungkin karena jumlah kolom yang dikembalikan oleh setiap SELECT pernyataannya berbeda.

Misalnya, SELECT . pertama pernyataan mungkin mengembalikan dua kolom, tetapi yang kedua SELECT pernyataan mengembalikan tiga.

Untuk memperbaiki masalah ini, pastikan keduanya SELECT pernyataan mengembalikan jumlah kolom yang sama.

Contoh Kesalahan

Berikut contoh kode yang menghasilkan kesalahan:

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

Hasil:

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

Di sini, SELECT first pertama pernyataan mengembalikan satu kolom (TeacherName ), tetapi SELECT second kedua pernyataan mengembalikan dua kolom (StudentId dan StudentName ).

Solusi

Cara untuk memperbaiki masalah ini adalah memastikan keduanya SELECT pernyataan mengembalikan jumlah kolom yang sama

Jadi dengan menggunakan contoh di atas, kita dapat menghapus kolom tambahan dari SELECT . kedua kita pernyataan:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Hasil:

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

Atau kita dapat menambahkan kolom lain ke SELECT pertama pernyataan:

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

Hasil:

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

Ingatlah bahwa Anda bisa mendapatkan hasil yang berbeda tergantung pada opsi mana yang Anda pilih. Ini karena UNION mengembalikan baris yang berbeda secara default. Saat kita menambahkan kolom lain, ada kemungkinan baris yang sebelumnya duplikat sekarang menjadi baris yang unik, tergantung pada nilai di kolom tambahan.

Kami juga dapat menggunakan UNION ALL , yang mengembalikan nilai duplikat:

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

Hasil:

+-----------+-------------+
| 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. Cara Menyimpan Data JSON di MySQL

  2. Mysql atau/dan didahulukan?

  3. MySQL:Mengurutkan nilai GROUP_CONCAT

  4. Cara Menjalankan Prosedur Tersimpan Di MySQL Workbench

  5. Apa struktur database terbaik untuk menyimpan data multibahasa?