Cita: espero me entiendan y me puedan ayudar...
Entenderte, se entiende. Pero hay algunos detalles que debes considerar, y muy probablemente debas replantear la forma de tu fuente de datos.
Lo que estás tratando de hacer es insertar varias cosas que son diferentes, y se está produciendo lo que se denomina "datos sucios", y lo que en realidad debes hacer es precisamente limpiar esos datos par que los ingresos sean correctos. No crear un proceso de inserción que los limpie.
Por lo que dices, tu Excel contiene tanto los datos de alta de las empresas, como los datos de actualización de las mismas. Además contendría datos correspondientes a otras tablas, dependientes de esas empresas.
Por lo pronto, debes separar las tres cosas:
1) Las tablas base, con un Excel que contenga sólo los datos a dar de alta en las tablas de Empresa u otras que puedas necesitar.
2) Las actualizaciones a las tablas base, a fin de realizar un proceso de UPDATE correcto.
3) Las tablas secundarias, donde uses los datos dependientes de las tablas base.
No existe forma de hacer una transferencia de datos con una única consulta y que haga estas tres cosas. Se deben hacer en momentos
diferentes, especialmente entre las dos primeras acciones y la tercera. Ambas deben estar completamente
terminadas antes de hacer la tercera, o todo fracasará.
Si bien existe una sentencia que reemplaza un registro con otro, esto haría que en el registro de la Empresa desaparezcan todos aquellos datos que no ingresen en la nueva alta. Además, este proceso no funciona si ya existen en la tabla secundaria registros que dependan de la empresa a reemplazar.
Otras opción sería usar el INSERT IGNORE INTO..., pero eso simplemente evitaría que se ingresen datos de una empresa que yá exista en la tabla, y no admitiría actualizar campos.
Es posible que se pueda hacer un stored procedure que haga alternativamente las altas y los update correspondiente a las Empresas, pero lo que sí es seguro es que no podrás dar el alta a las tablas de segundo orden sin que las tablas base estén completa.
Si lo pudieras hacer se generaría una peligrosísima falla de integridad referencial y consistencia de datos.
¿Se entiende el planteo?