2010-06-25 18 views
6

Ho un foglio Excel con circa 2.000 righe che voglio inserire nel mio database.MySQL: Inserisci se esiste una chiave esterna

Il problema è che la tabella in cui voglio inserire le 2.000 righe contiene una colonna che fa riferimento a una chiave esterna in un'altra tabella. Sfortunatamente molte query falliscono, poiché il valore della chiave esterna fornita NON esiste.

So che posso ignorare i controlli di chiavi esterne, ma questo non è quello che voglio. Non voglio ignorare i controlli delle chiavi esterne, voglio solo che le query non valide vengano eseguite.

Esempio:

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

La prima query fallisce, poiché TEST.id riferimenti foobar.id e non c'è foobar.id = 10. Tuttavia, la seconda query dovrebbe funzionare, poiché foobar.id = 20 esiste, ma non verrà eseguita la seconda query, perché il primo ha già fallito.

È possibile che non venga visualizzato un errore nella prima query e che le altre query vengano comunque eseguite?

Potrei scrivere uno script php, ma preferirei una soluzione MySQL qui.

risposta

3

si potrebbe cambiare per inserire il risultato di una selezione, in modo da qualcosa come:

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

devono aggiungere limite 1, altrimenti ogni inserto potrebbe essere più righe. – MJB

+0

@ MJB Suppongo che id sia la chiave primaria su 'foobar', per l'OP, quindi non è necessario * LIMIT * *. –

+0

Se faccio così, è possibile inserire i dati solo in "test", che è già in "foobar", giusto? Ma ho nuovi dati da aggiungere, che provengono dal foglio Excel. Posso in qualche modo regolare questo, quindi posso aggiungere nuovi dati ad esso? – user375700

Problemi correlati