Puedes hacer un INSERT INTO LEFT JOIN siempre y cuando haya una llave igual en las dos tablas.
Teniendo por ejemplo:
PersonsACREATE TABLE PersonsA
(
PersonID INT NOT NULL AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
PRIMARY KEY(PersonID)
);
PersonsBCREATE TABLE PersonsB
(
PersonID INT NOT NULL AUTO_INCREMENT,
LastName VARCHAR(255),
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255),
PRIMARY KEY(PersonID)
);
Los registros:
PersonsAINSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Tepo", "Nano", "street #1234", "Jamaica");
INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Tep", "Nan", "street #123", "Jamaic");
INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("Te", "Na", "street #12", "Jamai");
INSERT INTO PersonsA(LastName, FirstName, Address, City) VALUES("T", "N", "street #1", "Jama");
PersonsBINSERT INTO PersonsB(LastName, FirstName, Address, City) VALUES("Tepo", "Nano", "street #1234", "Jamaica");
INSERT INTO PersonsB(LastName, FirstName, Address, City) VALUES("Tep", "Nan", "street #123", "Jamaic");
Tu puedes vaciar los registros 3 y 4 de la tabla PersonsA a PersonsB así:
INSERT INTO PersonsB(PersonID, LastName, FirstName, Address, City) SELECT PersonsA.PersonID, PersonsA.LastName, PersonsA.FirstName, PersonsA.Address, PersonsA.City FROM PersonsA LEFT JOIN PersonsB ON PersonsA.PersonID = PersonsB.PersonID WHERE PersonsB.PersonID IS NULL
Y en cuanto a tu crontab puedes hacerte un archivo PHP que haga la query cada X mins:
*/X * * * * /usr/bin/php ruta/a/archivo/php &> /dev/null
Por cierto, esto no actualiza los campos de registros viejos, solo agrega registros diferentes.