我正在尝试将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。有什么建议 ?可能是一个简单的,我只是不知道如何开始...
答案 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中是如何完成的)