1

我正在尝试执行 INSERT INTO SELECT 语句,但是在执行此操作时,我希望 SELECT 语句中的一个字段返回 NULL 而不是原来的内容。

到目前为止,我有:

INSERT INTO `archive`
    SELECT *
    FROM `product`
    WHERE `id` = ?

我考虑过使用以下内容,但它不起作用,因为它添加了一个额外的字段而不是替换现有的字段:

INSERT INTO `archive`
    SELECT *, '' AS `image`
    FROM `product`
    WHERE `id` = ?

我知道我可以列出所有字段以便执行此操作,但这意味着我每次添加新字段等时都必须更新此语句。

有没有办法用上面的简短版本来做到这一点?

4

1 回答 1

2

不,您的两个选择是:

  1. SELECT在语句中单独列出字段
  2. UPDATE之后执行将INSERT列重新设置为NULL

第一个是正确的解决方案,IMO。它使将来的维护变得更容易(而不是看起来更困难),并且当您(或新程序员)从现在开始 6 个月后访问代码时,它会变得更加清晰。

于 2012-11-27T17:35:49.457 回答