Permasalahan dan Solusi Penggunaan Limit Pada Subquery MySQL

MySQL
Sakila-MySQL

Kali ini akan saya ulas sedikit tentang permasalahan perintah UPDATE dengan parameter yang menggunakan LIMIT pada MySQL yang sebenarnya pada saat ini MySQL sendiri masih belum mensupport mengenai masalah ini dan dinyatakan sebagai [Error 1235 : This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’].

Untuk lebih mudahnya, dapat kita buat studi kasus sederhana sebagai berikut:

Pada suatu proses seleksi sebuah perusahaan ada empat orang pendaftar yang masing-masing dari mereka diharuskan mengikuti ujian tes masuk. Dan dari semua pendaftar hanya akan diambil tiga orang dengan nilai terbaik.

Pertama,

Kita buat struktur tabelnya sebagai berikut :

CREATE TABLE IF NOT EXISTS `db_perusahaan`.`pendaftar` (
 `id` INT NOT NULL ,
 `nilai` INT NULL ,
 `status` VARCHAR(45) NULL ,
 PRIMARY KEY (`id`) 
) ENGINE = MyISAM DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;

 

Dan isikan data berikut ke dalam tabel yang sudah dibuat,

pendaftar
id nilai status
1 81 tidak lulus
2 75 tidak lulus
3 89 tidak lulus
4 76 tidak lulus

Dari tabel pendaftar yang ada, dapat kita ketahui bahwa ada 4 orang dengan nilai tertentu, dengan data ini kita akan ambil tiga (3) orang dengan nilai terbaik dan dan merubah status ketiga orang tersebut menjadi lulus. Dengan kata lain akan ada satu orang yang tidak lulus seleksi ini.

Kedua,

Kita buat seleksi terlebih dulu berdasakan nilai terbaik, dengan menggunakan ORDER BY DESC kemudian buat limitnya menjadi tiga orang (records). Syntax SQL-nya adalah sebagai berikut :

SELECT * FROM pendaftar ORDER BY pendaftar.nilai DESC LIMT 0,3;

 

Karena pada saat ini yang kita butuhkan hanya id peserta saja, maka ubah SELECT di atas menjadi seperti di bawah ini.

SELECT pendaftar.id FROM pendaftar ORDER BY pendaftar.nilai DESC LIMIT 0,3;

 

Ketiga,

Kita persiapkan syntax SQL untuk update query :

UPDATE pendaftar SET pendaftar.status = ´lulus seleksi´ WHERE pendaftar.id IN (

 

Syntax di atas dapat dibaca seperti ini : “Ubah status pendaftar menjadi ‘lulus seleksi’ dimana di dalam…“.

Keempat,

Sekarang kita gabungkan dua query di atas, dan hasilnya seperti ini :

UPDATE pendaftar SET pendaftar.status = ´lulus seleksi´ 
WHERE pendaftar.id IN (
SELECT pendaftar.id FROM pendaftar ORDER BY pendaftar.nilai DESC LIMIT 0,3
);

 

Jika anda run syntax tersebut, maka akan terjadi error. Hehe… (karena memang belum selesai).

Benar! Error yang terjadi adalah Error Number 1235 (#1235). Untuk mengatasi masalah ini, kita tambahkan syntax SELECT yang kedua, sehingga syntax-nya terlihat seperti di bawah ini :

UPDATE pendaftar SET pendaftar.status = ´lulus seleksi´ 
WHERE pendaftar.id IN ( 
SELECT id FROM ( 
SELECT pendaftar.id FROM pendaftar ORDER BY pendaftar.nilai DESC LIMIT 0,3 
) 
ALIAS );

 

Sekarang coba anda run syntax SQL tersebut, dan jangan lupa ALIAS nya, karena ini sangat berpengaruh terhadap keseluruhan syntax yang sudah dibuat. Satu hal lagi, jika anda menggunakan (SELECT *) maka akan memicu error yang berbeda, karena pada dasarnya WHERE hanya menggunakan satu field saja sebagai parameternya.

Semoga membantu.

Comments on Permasalahan dan Solusi Penggunaan Limit Pada Subquery MySQL

Social Media Auto Publish Powered By : XYZScripts.com