2010-06-25 19 views
6

Tengo una hoja de Excel con alrededor de 2.000 filas que quiero insertar en mi base de datos.MySQL: Insertar si existe una clave externa

El problema es que la tabla en la que quiero insertar las 2.000 filas tiene una columna que hace referencia a una clave externa en otra tabla. Desafortunadamente, muchas consultas fallan, ya que el valor de la clave externa proporcionada NO existe.

Sé que puedo ignorar las verificaciones de claves externas, pero esto no es lo que quiero. No quiero ignorar las verificaciones de claves externas, solo quiero que las consultas incorrectas no se ejecuten.

Ejemplo:

INSERT INTO test (id, value) VALUES (10, 20); 
INSERT INTO test (id, value) VALUES (20, 20); 

La primera consulta falla, ya TEST.id referencias foobar.id y no hay foobar.id = 10. Sin embargo, la segunda consulta funcionaría, ya que existe foobar.id = 20, pero no se ejecutará la segunda consulta, porque el primero ya falló.

¿Hay alguna forma de que no obtenga un error en la primera consulta y mis otras consultas se seguirán ejecutando?

Podría escribir un script php, pero preferiría una solución MySQL aquí.

Respuesta

3

podría cambiar para insertar el resultado de una selección, así que algo como:

INSERT INTO test (id, value) 
SELECT foobar.id, 20 
FROM foobar WHERE id = 10; 
+0

tiene que agregar límite 1, de lo contrario cada inserto podría haber múltiples filas. – MJB

+0

@MJB Supongo que id es la clave principal en 'foobar', por OP, por lo que' LIMIT' * no debería * ser necesario. –

+0

Si lo hago así, solo es posible insertar datos en "prueba", que ya está en "foobar", ¿verdad? Pero tengo nuevos datos para agregar, que provienen de la hoja de Excel. ¿De alguna manera puedo ajustar esto para poder agregarle nuevos datos? – user375700

Cuestiones relacionadas