Ho due tabelle strutturalmente identiche, table2 è una base di staging per i nuovi dati che verranno utilizzati nella tabella di aggiornamento di massa1.MySQL confronta due tabelle e restituisce righe che hanno la stessa chiave primaria ma dati diversi in altri campi
Ho bisogno di scoprire quali righe verrebbero aggiornate in table1. Voglio ignorare le righe che verrebbero inserite e quelle che verrebbero eliminate. Sono solo interessato alle righe aggiornate, in cui la chiave primaria rimane la stessa, ma uno o più degli altri campi nella riga contiene dati diversi.
Finora il più vicino che ho ricevuto è la seguente dichiarazione.
SELECT table2.* FROM table2
INNER JOIN table1
ON table1.primarykey = table2.primarykey
WHERE table1.field1 != table2.field1
OR table1.field2 != table2.field2
OR table1.field3 != table2.field3
Restituisce 0 righe.
MODIFICA: la query funziona effettivamente. C'è stato un problema con i dati stessi. Ho intenzione di fare facepalm per un po '.
Grazie a tutti per il vostro contributo.
I campi possono essere annullabili? –
Come Conrad stava arrivando, null non è uguale a zero quindi devi tenerne conto nel tuo confronto - nel modo in cui lo hai scritto, i dati potrebbero essere "uguali" ma appariranno non uguali se ci sono valori nulli lì dentro. – Poodlehat
Inoltre, se si utilizza un motore di archiviazione che lo consente, perché non disattivare semplicemente l'autocommit, eseguire l'aggiornamento e vedere cosa è cambiato, quindi ripristinarlo? – Poodlehat