2014-05-13 4 views
0

DB에 문장을 실행하는 방법을 알려주십시오. 2 개 테이블 (잘못된 쓰기 죄송합니다 - 그냥 컬럼에 대한 정보를 제공하는 것입니다)가 있습니다INSERT INTO ... VALUES ... SELECT. INSERT로 중첩 된 문장을 만드는 법?

  1. 계약자 (contractor_id, contractor_name, contract_num)

  2. 송장 (contractor_id, INVOICE_NUM, invoice_date, INVOICE_AMOUNT을)

'청구서'의 'contractor_id'는 '계약자'의 'contractor_id'에 대한 외래 키입니다. invoice_num, invoice_date, invoice_amount, 'contractor_name'을 'contractors'테이블에서 가져온 경우 'invoices'테이블에 다음 데이터를 삽입하는 방법은 무엇입니까? 작동

솔루션은 다음과 같습니다

public void insertInvoiceDataByContractorName(String contractorsName, String invoiceNum, String date, float amount) { 
     String contrId = null; 
     try { 
      preparedStatement = connection.prepareStatement("SELECT contractor_id FROM contractors WHERE contractor_name=?"); 
      preparedStatement.setString(1, contractorsName); 
      resultSet = preparedStatement.executeQuery(); 
      while (resultSet.next()) { 
       contrId = resultSet.getString(1); 
      } 
      preparedStatement = connection.prepareStatement("INSERT INTO invoices VALUES(?, ?, ? ,?)"); 
      preparedStatement.setString(1, contrId); 
      preparedStatement.setString(2, invoiceNum); 
      preparedStatement.setString(3, date); 
      preparedStatement.setFloat(4, amount); 
      preparedStatement.execute(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (preparedStatement != null) {preparedStatement.close();} 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

나는 그것이 올바른 만드는 방법을 알고하지 않고 하나의 문을 사용하여 더 간단합니다. 충고에 대해 미리 감사드립니다.

답변

3

이 1 개 행이 계약자 이름

+0

Chetan에 고유 한 가정 삽입합니다

INSERT INTO invoices SELECT contractor_id, ?, ?, ? FROM contractors WHERE contractor_name=? 

사용, 나를 위해 작동하지 않았다. – aime

+0

어떤 오류가 발생합니까? 이것은 mysql에서 지원됩니다 : http://dev.mysql.com/doc/refman/5.0/en/insert-select.html – 6ton