Создайте основную таблицу, которая содержит только идентификатор:
CREATE TABLE master (ID INT NOT NULL PRIMARY KEY)
и создайте все три таблицы для ссылки на эту основную таблицу с помощью ON DELETE CASCADE
.
Чтобы заполнить таблицу в первый раз, наберите
INSERT
INTO master
SELECT id
FROM a
UNION
SELECT id
FROM b
UNION
SELECT id
FROM c
Чтобы регулярно заполнять таблицу, создайте триггер для каждой из трех таблиц.
Этот триггер должен попытаться вставить новый ID
в master
и молча завершиться ошибкой при PRIMARY KEY
нарушении.
Для запроса используйте:
SELECT *
FROM master m
LEFT OUTER JOIN
a
ON a.id = m.id
LEFT OUTER JOIN
b
ON b.id = m.id
LEFT OUTER JOIN
c
ON c.id = m.id
Это будет эффективно использовать индексы.
Чтобы удалить, используйте:
DELETE
FROM master
WHERE id = @id
Это вызовет ON DELETE CASCADE
и удалит записи из всех трех таблиц, если таковые имеются.