MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Perbaiki Kesalahan 1064 (42000) saat menggunakan Operator MINUS di MariaDB

Setidaknya ada beberapa kemungkinan alasan Anda mungkin mendapatkan kesalahan yang ditakuti 1064 (42000) yang berbunyi "Anda memiliki kesalahan dalam sintaks SQL Anda ..." dll ketika mencoba menggunakan MINUS operator di MariaDB.

Saya akan mempelajarinya di bawah ini dan menawarkan beberapa solusi.

Contoh Kesalahan

Berikut contoh kode yang menyebabkan kesalahan:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Hasil:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT StudentName FROM Students' at line 3

Biasanya, kesalahan ini dihasilkan ketika Anda memiliki kesalahan dalam kode Anda. Karena secara eksplisit menyatakan "Anda memiliki kesalahan dalam sintaks SQL Anda".

Namun, itu hanya salah satu dari beberapa kemungkinan di sini.

Dalam kasus saya, tidak ada kesalahan dalam sintaks saya. Pasti ada alasan lain.

Berikut adalah beberapa kemungkinan alasan untuk kesalahan ini, dan saran tentang cara memperbaikinya masing-masing.

Solusi 1

Pertama-tama, MINUS operator diperkenalkan di MariaDB 10.6.1. Oleh karena itu, jika Anda menjalankan MariaDB versi sebelumnya, MINUS operator tidak akan bekerja untuk Anda.

Dalam hal ini, tingkatkan instalasi MariaDB Anda ke versi terbaru (atau setidaknya, versi tidak lebih awal dari 10.6.1).

Solusi 2

Kedua, MINUS operator hanya bekerja dalam mode Oracle. Meskipun ini tidak disebutkan secara eksplisit dalam dokumentasi MariaDB, ini tersirat dalam tugas untuk mengimplementasikan MINUS operator di MariaDB.

Jika Anda sudah menjalankan MariaDB 10.6.1 atau lebih baru, Anda harus beralih ke mode Oracle sebelum menggunakan MINUS operator.

Oleh karena itu, jalankan kode berikut sebelum Anda mulai menggunakan MINUS operator:

SET sql_mode = "oracle";

Sekarang Anda seharusnya dapat menggunakan MINUS operator dalam kode Anda.

Solusi 3

Jika Anda telah melakukan semua hal di atas, tetapi Anda masih mendapatkan kesalahan, mungkin saja ada kesalahan dalam sintaks Anda.

Misalnya, saya menjalankan MariaDB 10.6.1 dalam mode Oracle, tetapi kode berikut menghasilkan kesalahan:

SELECT TeacherName FROM Teachers;
MINUS
SELECT StudentName FROM Students;

Hasil:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MINUS

Dalam hal ini, saya tidak sengaja memasukkan titik koma setelah SELECT . pertama pernyataan, yang merupakan kesalahan umum. Untuk memperbaikinya, saya cukup menghapus titik koma pertama itu:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Hasil:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Sukses!

Solusi 4

Jika Anda sudah mencoba semua solusi di atas, tetapi Anda masih mendapatkan kesalahan, mungkin sudah waktunya untuk menggunakan EXCEPT operator. MINUS operator adalah sinonim untuk EXCEPT , jadi keduanya menggunakan sintaks yang sama dan mengembalikan hasil yang sama.

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Hasil:

+-------------+
| TeacherName |
+-------------+
| Ben         |
| Cathy       |
+-------------+

Solusi 5

Jika sekarang Anda tidak ingin melakukan apa pun dengan MINUS atau EXCEPT , ada opsi lain.

Anda dapat menggunakan subquery seperti berikut untuk mengembalikan hasil yang sama:

SELECT 
    DISTINCT TeacherName
FROM Teachers t 
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Jelas, kueri persis yang Anda gunakan akan bergantung pada skema dan data Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Enkripsi Cadangan Basis Data - Praktik Terbaik

  2. Pemantauan MySQL Proaktif (Studio Pengembang/Sudut Penasihat)

  3. HOUR() vs EXTRACT(HOUR ...) di MariaDB:Apa Bedanya?

  4. ClusterControl - Manajemen Cadangan Tingkat Lanjut - mariabackup Bagian II

  5. Menyiapkan Cluster Database Geo-Distributed Menggunakan Replikasi MySQL