Hola: Estuve mirando tu consulta y me quede pensando... ¿Es necesario que teniendo los datos en la tabla1, tabla2 y tabla3 juntes todo en una tabla4, es decir, estas duplicando registros y eso es como medio innecesario.
Por otra parte puedo indicarte el uso de Join para realizar tu consulta y dependera de cuales valores son los que queres que aparezcan si tienen o no correspondencia. Por ejemplo
Código SQL
[-]Select * From tabla1 left join tabla2 on tabla1Campo = Tabla2Campo
En ese caso trae todos los registros de la tabla1 o sea la de la izquierda tenga correspondencia o no con la tabla derecha y
Código SQL
[-]Select * From tabla1 right join tabla2 on tabla1Campo = Tabla2Campo
es el caso inverso, o sea la de la derecha.
Resultado: suponte que en una tabla cliente la relacionas con deudas por Left join y si ese cliente no tiene registros en deudas los valores a mostrar serian completados con null. Por Ejemplo (lo pongo como codigo para que diferencies los campos).-
Código:
Id Apellido Nombres NroCta IdCte Deuda
1 Perez Roberto 221 1 2300
2 Gomez Jesus 225 null null
3 Gonzalez Juan 227 3 850
Como verás trae todos los clientes teniendo correspondencia o no con la de deudas.-
Con las tres tablas seria
Código SQL
[-]Select * From tabla1 left join tabla2 on tabla1Campo = Tabla2Campo
left join tabla3 on tabla2Campo = Tabla3Campo
Espero que me hallas entendido algo y por ahí resuelves lo que necesitabas. Igualmente me parece poco eficiente que repitas o dupliques los datos en una tabla final (A menos que sea imprescindible para algo).-
Primero proba la consulta a traves del select sin el insert para ver si tenes todos los datos que necesitas y despues realiza las modificaciones para que inserte
Saludos