2013-02-20 4 views
1

두 개의 MS 액세스 테이블에서 하나의 ms 액세스 테이블에 삽입하려고합니다. 두 테이블 중 하나에 중복 값이 ​​포함 된 열이 있습니다. 내가 지금있는 것은 :두 테이블에서 한 테이블에 삽입 할 때 중복을 무시합니다.

Dim MySQL As String = "INSERT INTO XML_TEST_CASE (" & _ 
            "TCParmId, " & _ 
            "TestCase, " & _ 
            "MessageType, " & _ 
            "FileNo, " & _ 
            "InstructionNo, " & _ 
            "TransactionNo, " & _ 
            "ElementNo, " & _ 
            "MessageSection, " & _ 
            "ElementLevel, " & _ 
            "FullElementPath, " & _ 
            "ElementValue, " & _ 
            "ElementValueNew, " & _ 
            "NameSpace, " & _ 
            "NameSpaceValue, " & _ 
            "Attribute, " & _ 
            "AttributeValue, " & _ 
            "TestCaseDescription) " & _ 
            "SELECT " & _ 
            "P.TCParmId, " & _ 
            "P.TestCase, " & _ 
            "P.MessageType, " & _ 
            "P.FileNo, " & _ 
            "P.InstructionNo, " & _ 
            "P.TransactionNo, " & _ 
            "S.ElementNo, " & _ 
            "S.MessageSection, " & _ 
            "S.ElementLevel, " & _ 
            "S.ElementPath + S.Element, " & _ 
            "S.ElementValue, " & _ 
            "S.ElementValue, " & _ 
            "S.NameSpace, " & _ 
            "S.NameSpaceValue, " & _ 
            "S.Attribute, " & _ 
            "S.AttributeValue, " & _ 
            "P.TestCaseDescription " & _ 
            "FROM XML_TEST_CASE_PARAMETER P, XML_MESSAGE_STRUCTURE S " & _ 
            "WHERE S.MessageType = P.MessageType " & _ 
            "AND P.TestCase = '" & MyTestCase & "' " & _ 
            "AND P.MessageType = '" & MyMessageType & "' " & _ 
            "AND P.FileNo = " & MyFileNo & " " & _ 
            "AND P.InstructionNo = " & MyInstructionNo & " " & _ 
            "AND P.TransactionNo = " & MyTransactionNo & ";" 

문제는 XML_MESSAGE_STRUCTURE 테이블에이 S.ElementNo 때때로 appreas 것을 일어나는 것을 더 이상 나는이 둘 이상의 레코드를 얻을 cuasing 한 번 특정 ElementNo에 대한 내 대상 테이블에서. 나는 이것을 원하지 않는다.

도움이 필요합니다. ElementNo를 제외한 모든 필드에 의해

리코

+0

가장 쉬운 방법은 elementNo에 고유 색인을 추가하는 것입니다. – Fionnuala

+0

모든 othjer 필드가 동일합니까? 그렇다면 SELECT DISTINCT를 사용하십시오. 그렇지 않다면 삽입 할 레코드와 제외해야 할 레코드를 어떻게 선택 하시겠습니까? –

+0

Remou, elementNo가 중복 될 수 있기 때문에 옵션이 아닙니다. 그러나 TCParmID가 동일하지 않은 경우에만 옵션이됩니다. 즉, 각 테스트 케이스 (TCParmID)마다 항상 각 ElementNo 중 하나만 있어야합니다. –

답변

0

대신 SELECT DISTINCT, 당신은 할 수 그룹. ElementNo의 경우 Max(ElementNo)을 선택하십시오.

Dim MySQL As String = "INSERT INTO XML_TEST_CASE (" & _ 
           "TCParmId, " & _ 
           "TestCase, " & _ 
           "MessageType, " & _ 
           "FileNo, " & _ 
           "InstructionNo, " & _ 
           "TransactionNo, " & _ 
           "ElementNo, " & _ 
           "MessageSection, " & _ 
... 
           "SELECT " & _ 
           "P.TCParmId, " & _ 
           "P.TestCase, " & _ 
           "P.MessageType, " & _ 
           "P.FileNo, " & _ 
           "P.InstructionNo, " & _ 
           "P.TransactionNo, " & _ 
           "Max(S.ElementNo), " & _ 
           "S.MessageSection, " & _ 
... 
           "FROM XML_TEST_CASE_PARAMETER P, XML_MESSAGE_STRUCTURE S " & _ 
           "WHERE S.MessageType = P.MessageType " & _ 
           "AND P.TestCase = '" & MyTestCase & "' " & _ 
           "AND P.MessageType = '" & MyMessageType & "' " & _ 
           "AND P.FileNo = " & MyFileNo & " " & _ 
           "AND P.InstructionNo = " & MyInstructionNo & " " & _ 
           "AND P.TransactionNo = " & MyTransactionNo & _ 
           "GROUP BY " & _ 
           "P.TCParmId, " & _ 
           "P.TestCase, " & _ 
           "P.MessageType, " & _ 
           "P.FileNo, " & _ 
           "P.InstructionNo, " & _ 
           "P.TransactionNo, " & _ 
           "S.MessageSection, " & _ 
... 
           ";" 
관련 문제