Sebenar saya sudah lama hendak menulis mengenai UPDATE JOIN ini sebab ia sangat membantu anda dalam patching data atau dalam update column data tanpa perlu kod yang berjela-jela.
Asas kod UPDATE JOIN adalah seperti berikut
UPDATE tab_destinasi
SET col_td1 = new_value
FROM tab_sumber ts
WHERE col_td2 = ts.col_ts2;
tab_destinasi - table yang anda ingin update column value
tab_sumber - table yang anda ambil value (punca select anda)
Mari kita mulakan
Bina table dan masukkan data
Maklumat Kelas
CREATE TABLE kelas (
id SERIAL PRIMARY KEY,
kod_kelas VARCHAR,
name VARCHAR NOT NULL,
total_students int
);
INSERT INTO
kelas (kod_kelas, name)
VALUES
('SK001', 'Jaya'),
('SK002', 'Maju'),
('SK003', 'Usaha');
Maklumat Pelajar
CREATE TABLE pelajar (
id SERIAL PRIMARY KEY,
kod_kelas VARCHAR,
name VARCHAR NOT NULL
);
INSERT INTO
pelajar (kod_kelas, name)
VALUES
('SK001', 'Hasbullah'),
('SK002', 'Abu Bakar'),
('SK003', 'Johan'),
('SK001', 'Kartini'),
('SK002', 'MeiMei'),
('SK003', 'Susanti'),
('SK001', 'Ram');
Anda ditugaskan untuk mengira jumlah pelajar dalam setiap kelas dan update dalam table kelas
Untuk mendapatkan jumlah pelajar untuk setiap kelas anda boleh mendapatkanya dengan kod SQL ini:
select kod_kelas, count(*) as jumlah_pelajar
from pelajar
group by kod_kelas
Untuk update table kelas, anda boleh menggunakan kod SQL ini:
UPDATE kelas td
SET total_students = jumlah_pelajar
FROM (
select kod_kelas, count(*) as jumlah_pelajar
from pelajar
group by kod_kelas
) ts
WHERE td.kod_kelas = ts.kod_kelas;
Hasilnya
Selamat mencuba.