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

如何编写正确SQL:根据exam表空examRegulation行插入examRegulation表

嘿,我来帮你搞定这个SQL插入的问题~

你的原查询有两个关键问题需要修正:

  • 批量从现有表取数据插入目标表时,不该用VALUES子句搭配WHERE,这种写法不符合SQL语法,正确的方式是直接使用INSERT ... SELECT的关联结构
  • 判断空值的写法不标准:SQL规范里判断字段为空是IS NULL,isnull是部分数据库(比如SQL Server)的专用函数,用标准写法兼容性更强

正确的基础写法

INSERT INTO examRegulation (graduation, course, examnumber, examversion)
SELECT graduation, course, examnumber, examversion
FROM exam
WHERE exam.examRegulation IS NULL;

这个写法的逻辑很直接:

  1. 从exam表中筛选出examRegulation为空的行
  2. 把这些行的指定列数据直接插入到examRegulation表对应的列中
  3. 要注意SELECT后的列顺序必须和INSERT INTO里指定的目标列顺序完全匹配,这样数据才会对应正确

可选:避免重复插入的增强写法

如果担心后续重复执行这个语句会插入重复数据,可以添加NOT EXISTS来做存在性检查,确保只有目标表中没有的记录才会被插入:

INSERT INTO examRegulation (graduation, course, examnumber, examversion)
SELECT e.graduation, e.course, e.examnumber, e.examversion
FROM exam e
WHERE e.examRegulation IS NULL
AND NOT EXISTS (
    SELECT 1
    FROM examRegulation er
    -- 这里的条件要根据业务主键来设置,确保能唯一识别重复记录
    WHERE er.graduation = e.graduation
      AND er.course = e.course
      AND er.examnumber = e.examnumber
      AND er.examversion = e.examversion
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:13:43