如何将单表多条数据转移到另一张表且避免其余字段出现空值
解决方案
你使用INSERT SELECT出现额外字段为空的核心原因是:INSERT操作未指定赋值的字段,如果没有配置默认值就会自动填充NULL,可根据你的实际需求选择以下方案解决:
- 方案1:直接在SELECT语句中指定额外字段的固定值
不需要修改表结构,直接把你要填充到额外字段的值写在查询逻辑中即可,示例语句如下:INSERT INTO 第二张表 (IDNUM, STUD_NAME, DATE_TAKEN, ANSWER1, ANSWER2, ANSWER3) SELECT IDNUM, STUD_NAME, DATE_TAKEN, 'YES' AS ANSWER1, -- 替换成你需要的默认值 'NO' AS ANSWER2, -- 替换成你需要的默认值 'YES' AS ANSWER3 -- 注意你给出的第二张表字段名重复了两个ANSWER1,这里修正为ANSWER3,实际使用请对应正确字段名 FROM 第一张表; - 方案2:给目标表的额外字段设置默认值
如果这些额外字段的默认值是固定的,可直接修改表结构给字段加DEFAULT约束,后续插入数据时不需要主动赋值就会自动填充默认值:-- 给字段设置默认值示例,可按实际需求修改默认值和字段类型 ALTER TABLE 第二张表 ALTER COLUMN ANSWER1 SET DEFAULT 'YES'; ALTER TABLE 第二张表 ALTER COLUMN ANSWER2 SET DEFAULT 'NO'; ALTER TABLE 第二张表 ALTER COLUMN ANSWER3 SET DEFAULT 'YES'; -- 之后正常执行INSERT SELECT即可,不需要再写额外字段 INSERT INTO 第二张表 (IDNUM, STUD_NAME, DATE_TAKEN) SELECT IDNUM, STUD_NAME, DATE_TAKEN FROM 第一张表; - 方案3:如果是要更新第二张表已有的行而非新增行,用关联UPDATE代替INSERT
如果你第二张表已经存在对应IDNUM的行,只是需要同步第一张表的三个字段内容,用INSERT会新增空行导致额外字段为空,改用关联更新即可保留原有ANSWER字段的内容:UPDATE 第二张表 t2 INNER JOIN 第一张表 t1 ON t2.IDNUM = t1.IDNUM SET t2.STUD_NAME = t1.STUD_NAME, t2.DATE_TAKEN = t1.DATE_TAKEN;
内容的提问来源于stack exchange,提问作者Cupcakewithchocolate
相关产品推荐
相关产品推荐

