2012-03-09 6 views
0

私は会計取引のテーブルを持っており、それらを新しいテーブルにコピーしようとしています。私はコピーを作成しましたが、ソーステーブルから新しいトランザクションをコピーする必要があります。私が持っている問題は、ソースデータが、これらのトランザクションを作成するために多くの異なるソースをリンクし、ユニークなキーを持たないレポートから来ていることです。私は一意のキーを持っていた場合ユニークキーなしで新しいレコードを取得するクエリを更新しますか?

は、私が更新クエリを作成し、コピーしたテーブルにソーステーブルから参加して、いつでもキーは、これらのフィールドを更新し、コピーしたテーブルにnullの左を行うだろう。

私は一意のキーを持っていないので、私はこれを実現する方法がわかりません。何か案は?

-----による回答の編集-----

SourceTable 
Field1 Field2 Field3 

CopiedTable 
Field1 Field2 Field3 

だから私はこれを行うだろう新しいレコードでCopiedTableを更新します?

UPDATE CopiedTable SET 
     CopiedTable.Field1 = SourceTable.Field1, 
     CopiedTable.Field2 = SourceTable.Field2, 
     CopiedTable.Field3 = SourceTable.Field3 
WHERE (SourceTable.Field1 <> CopiedTable.Field1 AND 
     SourceTable.Field2 <> CopiedTable.Field2 AND 
     SourceTable.Field3 <> CopiedTable.Field3) 
+0

は、その後どのように更新された値であるかを知ることになっていますか? – Lamak

+0

フィールドの全ての組み合わせが、それはユニークで私の仮定であるになるだろう、私はそれが – chucklukowski

答えて

1

ソーステーブル、宛先テーブル、およびクエリを表示せずに質問に答えることは困難です。

は、異なる表のすべての一意のキーフィールドから成る複合キーを使用してください。


EDIT:

すべてのテーブルは主キーを持っている必要があります。これはデータベースの基本的なデザインルールです。私たちは今、あなたはこの

SELECT 
    CLng(A.A_ID) AS A_ID, CLng(B.B_ID) AS B_ID, 
    A.DataField1, A.DataField2, B.DataField3, B.DataField4 
INTO 
    C 
FROM 
    A INNER JOIN B ON A.A_ID = B.A_ID; 

のようなテーブルCを作成することができ、私はA_IDB_IDCの主キーになるだろうあなたは二つのソーステーブルAとB

 
Table A 
------- 
A_ID, DataField1, DataField2 

Table B (lined to Table A through A_ID) 
------- 
B_ID, A_ID, DataField3, DataField4 

を持っていると仮定しましょう。

A_IDB_IDは、我々はAとBからの新しいデータでCを補充したい後の場合は、私たちが行うことができ、我々はC.

での定期的な数値フィールドを作成するためにCLngでトリックを行う必要があるAutoNumbersある場合

DELETE * FROM C; 

INSERT INTO C 
    (A_ID, B_ID, DataField1, DataField2, DataField3, DataField4) 
SELECT 
    A.A_ID, B.B_ID, A.DataField1, A.DataField2, B.DataField3, B.DataField4 
FROM 
    A INNER JOIN B ON A.A_ID = B.A_ID; 

我々はレコードのみを変更し、更新したい場合は、我々はWHERE句の変化

UPDATE 
    C 
    INNER JOIN (SELECT 
        A.A_ID, B.B_ID, 
        A.DataField1, A.DataField2, B.DataField3, B.DataField4 
       FROM 
        A INNER JOIN B ON A.A_ID = B.A_ID) AS Src 
     ON C.B_ID = Src.B_ID AND C.A_ID = Src.A_ID 
SET 
    C.DataField1 = Src.DataField1, 
    C.DataField2 = Src.DataField2, 
    C.DataField3 = Src.DataField3, 
    C.DataField4 = Src.DataField4 
WHERE 
    C.DataField1<>Src.DataField1 OR 
    C.DataField2<>Src.DataField2 OR 
    C.DataField3<>Src.DataField3 OR 
    C.DataField4<>Src.DataField4; 
を持っている場合、我々はコピーでソースをリンクする必要があり、加えて、テスト

サブ選択Srcは、別のストアドクエリである可能性があります。

+0

1一意であるために必要なフィールドの最小量のわからないんだけど、多くのコードを表示してください。 –

+0

ありがとう、複合キーを使用するための一般的なコードは何ですか? – chucklukowski

+0

'UPDATEテーブルSET値= newValue WHERE key1 = 12 AND key2 = 7 AND key3 = 100'。すべてのキーをANDするWHERE句を作成するだけです。 –

関連する問題