我有这样的查询
CREATE TRIGGER `tambah_riwayatobat` AFTER INSERT ON `obat`
FOR EACH ROW insert into riwayat_obat(nama, keterangan, distributor,tanggal)
(select new.nama, 'Masuk', d.nama ,now()
From distributor d
join obat ON new.id_distributor = d.id_distributor)
我尝试插入带触发器的数据和带有约束的部分数据之一,但为什么数据是重复的条目?
输出:
例如,如果我尝试第一次插入数据obat,tambah_riwayatobat上的数据也会插入1
如果我尝试第二次插入数据obat,tambah_riwayatobat上的数据插入2次相同的数据
如果我尝试第三次插入数据,则tambah_riwayatobat上的数据会以相同的数据插入3次
答案 0 :(得分:0)
我不确定完全发生了什么,但这是你的触发代码加入的结果。您已将obat
加入distributor
,但您的加入条件未提及obat
,因此您可以获得某种跨产品在您的INSERT
子查询的第二个及后续SELECT
选择多行。
您不应该(并且不需要)使用加入,因为obat
所需的所有数据都已在伪记录中 NEW
。以下代码应该更好用:
CREATE TRIGGER `tambah_riwayatobat`
AFTER INSERT ON `obat`
FOR EACH ROW
INSERT INTO riwayat_obat
(nama, keterangan, distributor, tanggal)
(SELECT NEW.nama, 'Masuk', d.nama, now()
FROM distributor d
WHERE new.id_distributor = d.id_distributor
LIMIT 1);
LIMIT
子句将确保SELECT
只选择一行,因此INSERT
只插入一行;如果distributor.id_distributor
是主键,则LIMIT
子句是不必要的。