我有很多行要复制,但我需要更改一个字段.
我可以选择要复制的行:
select * from Table where Event_ID = "120"
Run Code Online (Sandbox Code Playgroud)
现在我想复制所有这些行并在设置Event_IDto时创建新行155.我怎么能做到这一点?
dcp*_*dcp 253
INSERT INTO Table
( Event_ID
, col2
...
)
SELECT "155"
, col2
...
FROM Table WHERE Event_ID = "120"
Run Code Online (Sandbox Code Playgroud)
这里,col2,...表示表中剩余的列(Event_ID 以外的列).
Ale*_*lou 132
这是一个解决方案,您的表中有许多字段,并且不希望因为键入所有字段而导致手指抽筋,只需键入所需的字段:)
如何将某些行复制到同一个表中,其中一些字段具有不同的值:
你的代码:
CREATE table temporary_table AS SELECT * FROM original_table WHERE Event_ID="155";
UPDATE temporary_table SET Event_ID="120";
UPDATE temporary_table SET ID=NULL
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
Run Code Online (Sandbox Code Playgroud)
一般情景代码:
CREATE table temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
UPDATE temporary_table SET <auto_inc_field>=NULL;
INSERT INTO original_table SELECT * FROM temporary_table;
DROP TABLE temporary_table
Run Code Online (Sandbox Code Playgroud)
简化/简化代码:
CREATE TEMPORARY TABLE temporary_table AS SELECT * FROM original_table WHERE <conditions>;
UPDATE temporary_table SET <auto_inc_field>=NULL, <fieldx>=<valuex>, <fieldy>=<valuey>, ...;
INSERT INTO original_table SELECT * FROM temporary_table;
Run Code Online (Sandbox Code Playgroud)
由于临时表的创建使用TEMPORARY关键字,因此会话结束时会自动删除(如@ ar34z建议的那样).
Pet*_*ley 38
假设你的表有另外两列:foo和bar
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, "155"
FROM Table
WHERE Event_ID = "120"
Run Code Online (Sandbox Code Playgroud)
小智 10
如果表中有大量列,并且不想输出每个列,则可以使用临时表来执行此操作,例如;
SELECT *
INTO #Temp
FROM Table WHERE Event_ID = "120"
GO
UPDATE #TEMP
SET Column = "Changed"
GO
INSERT INTO Table
SELECT *
FROM #Temp
Run Code Online (Sandbox Code Playgroud)
小智 6
嘿,如何复制所有字段,将其中一个字段更改为相同的值+其他内容。
INSERT INTO Table (foo, bar, Event_ID)
SELECT foo, bar, Event_ID+"155"
FROM Table
WHERE Event_ID = "120"
Run Code Online (Sandbox Code Playgroud)
??????????