我有大量的行,我想复制,但我需要改变一个字段。

我可以选择我想要复制的行:

select * from Table where Event_ID = "120"

现在我想复制所有这些行并创建新行,同时将Event_ID设置为155。我怎样才能做到呢?


当前回答

嘿,复制所有字段如何,将其中一个更改为相同的值+其他值。

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
  FROM Table
 WHERE Event_ID = "120"

? ? ? ? ? ? ? ? ? ?

其他回答

INSERT INTO Table
          ( Event_ID
          , col2
           ...
          )
     SELECT "155"
          , col2
           ...
      FROM Table WHERE Event_ID = "120"

这里,col2,…表示表中剩下的列(Event_ID以外的列)。

如果你不介意在你的代码中这样做,它会更容易做到。例如,在php中

function copyQuery($table, $row){
    $queryColumns = $queryValues = '';
    foreach ($row as $key => $value) {
        $queryColumns .= $key.', ';
        $queryValues .= "'$value', ";
    }
    $queryColumns = rtrim($queryColumns, ', ');
    $queryValues = rtrim($queryValues, ', ');

    return "INSERT INTO $table ($queryColumns) VALUES ($queryValues)";
}

$records = mysqli_query($connect, "SELECT * FROM Table WHERE Event_ID = 120");
while ($row = mysqli_fetch_assoc($records)) {
    unset($row['id']);
    $row['Event_ID'] = 155;

    $query = copyQuery('Table', $row);
    mysqli_query($connect, $query);
}

使用函数是可选的。我做这个是因为我需要做几次。我使用这个选项是因为如果将来数据库列发生更改,我可以忘记它。

假设你的表有另外两列:foo和bar

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
  FROM Table
 WHERE Event_ID = "120"

只要Event_ID为Integer,执行以下操作:

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, (Event_ID + 155)
  FROM Table
WHERE Event_ID = "120"

嘿,复制所有字段如何,将其中一个更改为相同的值+其他值。

INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
  FROM Table
 WHERE Event_ID = "120"

? ? ? ? ? ? ? ? ? ?