Трудно ответить на вопрос, не увидев исходные таблицы, таблицу назначения и запрос.
Используйте составной ключ, состоящий из всех полей уникальных ключей различных таблиц.
РЕДАКТИРОВАТЬ:
Каждая таблица должна иметь первичный ключ.Это основное правило проектирования баз данных.Предположим, что у вас есть две исходные таблицы A и B
Table A
-------
A_ID, DataField1, DataField2
Table B (lined to Table A through A_ID)
-------
B_ID, A_ID, DataField3, DataField4
Теперь вы можете создать таблицу C следующим образом
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;
Я бы сделал A_ID
и B_ID
первичнымивведите C
.
Если A_ID
и B_ID
являются автонумерациями, нам нужно проделать трюк с CLng
, чтобы создать поля регулярных чисел в C.
Если позжемы хотим пополнить C свежими данными из A и B, мы можем сделать
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
может быть другим сохраненным запросом.