You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL执行简单INSERT报错Error 1242子查询返回多行问题咨询

问题根因

你遇到的#1242 - Subquery returns more than 1 row错误是由before insert触发器的赋值逻辑错误导致的:
触发器中给NEW.kategori_nama赋值的子查询直接全量关联了kategori和barang表,没有限定和当前插入行的匹配条件,会返回所有关联匹配的行结果,无法赋值给单个字段,因此触发报错。

修正方案

你需要直接用当前待插入行的kategori字段值去匹配kategori表的对应记录,不需要关联barang表本身,修正后的触发器代码如下:

BEGIN
SET NEW.tanggal = NOW();
-- 用当前插入行的kategori值匹配kategori表,仅返回对应分类名称
SET NEW.kategori_nama = (SELECT nama FROM kategori WHERE kode = NEW.kategori LIMIT 1);
SET NEW.hargadepresiasi = NEW.hargabeli * 2 / 8;
END
注意事项
  • 插入barang表数据时,请确保给kategori字段赋值为kategori表中已存在的kode值,否则kategori_nama仍会为空
  • 代码中增加LIMIT 1是为了避免kategori表存在重复kode时再次触发多行返回错误,如果kategori.kode已设置为唯一主键/唯一索引,可删除该限定
  • 若需批量填充barang表中已存在的旧数据的kategori_nama字段,可单独执行如下更新语句:
UPDATE barang b
INNER JOIN kategori k ON b.kategori = k.kode
SET b.kategori_nama = k.nama
WHERE b.kategori_nama IS NULL;

内容的提问来源于stack exchange,提问作者tryharder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:54:03