2016-10-17 71 views
1

我試圖插入來自Table 1和Table ID爲Table3.My表的設計是:SQL INSERT SELECT從表2到表3

Table1: 
Id_Table1 
field1 etc. 

Table2: 
Id_Table2 
field1 etc. 

Table3: 
Id_Table3 
Id_Table1_FK 
Id_Table2_FK 

我這樣做時,我保存表1的記錄。同時,我在我的表單中使用Datagridview,它使用組合框來查看錶2中的記錄。當我從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,????) 

所以,我的問題stucks與Id_Table2這需要由Datagridview.Row單元格的值第一選擇,然後通過結果像參數表3。有什麼建議麼 ?也許容易,我只是不知道如何下手......

+0

我的問題可能是愚蠢的,但你可以肯定的是你的選擇查詢將返回正好爲1倍的值?它可能沒有價值嗎? – romulus001

+0

@ romulus001,no它不能返回任何值。此INSERT僅發生如果您從Datagrid中的Comboboxcell中選擇一些記錄。 – LuckyLuke82

+0

@ romulus001,對此,我已經在查詢中添加了Top 1,以確保它只會返回一個記錄集。但是如果該字段是唯一的,則是可選的。 (正如我在編輯中提到的)。 –

回答

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

謝謝,你瞭解我!我不知道我也可以這樣寫SQL。 – LuckyLuke82

+0

不客氣。 –

+0

請使用SQL參數而不是字符串。 –

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做)