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

MySQL技术问询:如何基于selected_time自动填充slot_desc2字段?

实现自动填充slot_desc2的几种方案
  • 方案一:使用MySQL触发器(自动触发填充)
    通过创建触发器,在booking_table插入新记录或更新selected_time字段时,自动从timeslot_table匹配对应的timeslot_desc2并填充到slot_desc2字段。
-- 插入记录时触发的触发器
DELIMITER //
CREATE TRIGGER fill_slot_desc2_on_insert
BEFORE INSERT ON booking_table
FOR EACH ROW
BEGIN
    SELECT timeslot_desc2 INTO NEW.slot_desc2
    FROM timeslot_table
    WHERE timeslot_desc = NEW.selected_time;
END //
DELIMITER ;

-- 更新记录时触发的触发器(仅当selected_time变更时执行)
DELIMITER //
CREATE TRIGGER fill_slot_desc2_on_update
BEFORE UPDATE ON booking_table
FOR EACH ROW
BEGIN
    IF NEW.selected_time <> OLD.selected_time THEN
        SELECT timeslot_desc2 INTO NEW.slot_desc2
        FROM timeslot_table
        WHERE timeslot_desc = NEW.selected_time;
    END IF;
END //
DELIMITER ;

注意:需确保timeslot_table中的timeslot_desc字段唯一,避免出现多条匹配导致的赋值异常。

  • 方案二:插入/更新时直接关联赋值
    如果不需要自动触发逻辑,可在插入或更新数据时,通过关联查询直接获取对应值:

插入新预订时:

INSERT INTO booking_table (selected_time, slot_desc2, Name)
SELECT '目标时段内容', timeslot_desc2, '预订人姓名'
FROM timeslot_table
WHERE timeslot_desc = '目标时段内容';

更新已有预订的时段时:

UPDATE booking_table b
JOIN timeslot_table t ON b.selected_time = t.timeslot_desc
SET b.slot_desc2 = t.timeslot_desc2
WHERE b.booking_id = 目标预订ID;
  • 方案三:应用层提前获取对应值
    在前端或应用层选择selected_time(即timeslot_desc)时,同时查询对应的timeslot_desc2,再将两个值一起提交到booking_table。查询时段列表的SQL可调整为:
SELECT timeslot_desc, timeslot_desc2 FROM timeslot_table ORDER BY timeslot_id;

注:原SQL中ORDER BY timeslot_table语法错误,需指定具体排序字段,比如timeslot_id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:18:16