我有下表
我已将产品B插入其中,它给我一个15
的ID然后我有定义表,如下所示。
我想选择ProdID = 14的ProductDefinition行并复制它们并将其插入ProdID = 15,如下所示
如何使用SQL代码实现这一目标?
答案 0 :(得分:53)
INSERT INTO ProuctDefinition (ProdID, Definition, Desc)
SELECT
xxx, Definition, Desc
FROM
ProductDefinition
WHERE
ProdID = yyy
xxx
是您的新ProdID,yyy
是您的旧版本。这也假定在DefID
上自动填充INSERT
。
答案 1 :(得分:9)
这适用于您选择的任何列。不只是主键/ ID。
INSERT INTO TableName (Column1, CustomID, Column3, Column4, Column5)
SELECT Column1, 'NewValue', Column3, Column4, Column5 FROM TableName
WHERE CustomID='OrigValue'
答案 2 :(得分:3)
可以在SQL Server 2008上使用MERGE
,使用OUTPUT
返回DefID
值,假设它们是自动生成的,例如
MERGE INTO ProductDefinition
USING (
SELECT 16, P1.Definition, P1.Description
FROM ProductDefinition AS P1
WHERE P1.ProdID = 15
) AS source (ProdID, Definition, Description)
ON 0 = 1
WHEN NOT MATCHED THEN
INSERT (ProdID, Definition, Description)
VALUES (ProdID, Definition, Description)
OUTPUT inserted.DefID, inserted.ProdID,
inserted.Definition, inserted.Description;
答案 3 :(得分:2)
如果要选择所有项目(条件是表格中不包含任何主键)
INSERT INTO [tabelName]
SELECT * FROM [tabelName]
WHERE (YourCondition)
在表中包含主键的情况下,只选择不是主键的列:
INSERT INTO [tabelName]
SELECT col_1,col_2,col_n FROM [tabelName]
WHERE (YourCondition)
答案 4 :(得分:1)
如果要在同一个表中复制数据,请使用以下逻辑:
首先,在您要插入的位置插入陈述......
insert into [table](column1,column2)
第二步,选择要从中取数据进行插入的状态....
select (column1/'your value',column2/'your value') from [table]
现在设置过滤要复制的行
where (your condition)
因为我想使用此查询为不同的客户复制相同的数据。
答案 5 :(得分:1)
如果您的id不是自动增量或声明的序列,并且您不想创建临时表:
你可以使用:
INSERT INTO Tabel1 SELECT ((ROW_NUMBER( ) OVER ( ORDER BY ID )) + (SELECT MAX(id) FROM Table1)) ,column2,coulmn3,'NewValue' FROM Tabel1 Where somecolumn='your value`
答案 6 :(得分:0)
您使用 Oracle 吗?它没有自动PK_generator,对于您的INSERT
而言,无任何工作。但是,它具有SEQUENCE,因此我们使用其NEXTVAL
:
INSERT INTO Orders_tab (Orderno, Custno)
VALUES (Order_seq.NEXTVAL, 1032);
对于他们来说,INSERT操作就是这种情况,SEQUENCE
的目的就是,您只需显式地使用它即可。详细说明:Managing Sequences # Using Sequences
Sequences节点在Tables级别上,即在SQLdeveloper中。我们在每个数据库中都是ID_GENERATOR
。
答案 7 :(得分:0)
@testing-library