2016-10-17 11 views
1

에 내가 Table3.My 테이블 디자인에 표 1과 표 2에서 ID를 삽입 할 노력하고있어입니다 : 내가 표에 대한 기록을 저장할 때 나는 이렇게SQL INSERT SELECT 표 2에서 표 3

Table1: 
Id_Table1 
field1 etc. 

Table2: 
Id_Table2 
field1 etc. 

Table3: 
Id_Table3 
Id_Table1_FK 
Id_Table2_FK 

. 한편 Datagridview는 Table2의 레코드를보기 위해 comboboxcell을 사용하는 제 형식으로되어 있습니다. Table2에서 일부 레코드를 선택할 때 두 ID (Table1 & Table2)를 Table3에 삽입해야합니다. 여기

지금까지 (분명히 잘못) 내 코드입니다 :

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,????) 

그래서, 다음 Datagridview.Row의 셀 값에 의해 첫번째 선택 될 필요가 Id_Table2 내 문제 stucks가에 매개 변수처럼 전달 및 결과 표 3. 어떤 제안? 아마 쉬운 것, 나는 단지 어떻게 시작 해야할지 모르겠다. ...

+0

내 질문에 어리 석질 수 있지만 선택 쿼리가 정확히 1 값을 반환하는지 확인할 수 있습니까? 가치를 반환하지 않을 수 있습니까? – romulus001

+0

@ romulus001, 아니요 아무런 값도 반환 할 수 없습니다. 이 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 & "' 
)) 

편집 : 서브 쿼리는 1 개 레코드를 반환 확인 Top 1을 추가했습니다. 선택하려는 필드가 고유 한 경우 선택 사항입니다.

+1

감사합니다, 당신은 나를 이해했습니다! 나는 이런 식으로 SQL을 작성할 수 있다는 것을 몰랐다. – LuckyLuke82

+0

반갑습니다. –

+0

문자열 대신 SQL 매개 변수를 사용하십시오. –

0

사용 일정 valus를 반환하는 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에서 어떻게 수행되는지 모르겠 음)