从表2到表3的SQL INSERT SELECT

时间:2016-10-17 07:35:56

标签: sql vb.net oracle11g

我正在尝试将Table1和Table2中的ID插入Table3。我的表设计是:

Table1:
Id_Table1
field1 etc.

Table2:
Id_Table2
field1 etc.

Table3:
Id_Table3
Id_Table1_FK
Id_Table2_FK

我在保存Table1的记录时执行此操作。同时我的表格中有Datagridview,它使用comboboxcell查看Table2中的记录。当我从Table2中选择一些记录时,需要将两个ID(表1和表2)插入到表3中。

到目前为止,这是我的代码(显然是错误的):

INSERT INTO Table3 (Id_Table3, Id_Table1, Id_Table2) 

SELECT Id_Table2 FROM Table2 WHERE serial_no=" & MyDGV.CurrentRow.Cells(0).Value.ToString

VALUES (Id_Table3_seq.nextval, Id_Table1_seq.currval,????)

所以,我的问题困在Id_Table2,需要先通过Datagridview.Row单元格值选择,然后将结果像参数一样传递给Table3。有什么建议 ?可能是一个简单的,我只是不知道如何开始...

2 个答案:

答案 0 :(得分:2)

如果我明白你的观点,那么这就是你所需要的吗?

INSERT INTO Table3 (Id_Table3, Id_Table1, Id_Table2) 
VALUES (Id_Table3_seq.nextval, Id_Table1_seq.currval,(
SELECT Top 1 Id_Table2 FROM Table2 WHERE serial_no='" & MyDGV.CurrentRow.Cells(0).Value.ToString & "'
))

已编辑:已添加Top 1以确保子查询仅返回1个记录集。如果您选择的字段是唯一的,则它是可选的。

答案 1 :(得分:0)

使用返回常量值的SELECT

INSERT INTO Table3 (Id_Table3, Id_Table1, Id_Table2) 
select Id_Table3_seq.nextval, 
       Id_Table1_seq.currval,
       Id_Table2
FROM Table2 
WHERE serial_no='" & MyDGV.CurrentRow.Cells(0).Value.ToString & "';

通常,您不应将值连接到SQL字符串中。使用带参数(占位符)的预准备语句(不知道在VB.net中是如何完成的)