Selezionare i records che non sono in una tabella

Ho due tabelle del mio database MySql, 'Table1' e 'Table' con le stesse chiavi primarie. Vorrei poter selezionare tutte le righe (records) della prima tabella che non siano presenti anche nella seconda tabella.

Avevo pensato a qualcosa del genere:

Select * from Table1 where not exists in (Select * from Table2 where Table1.id=Table2.id);

C'è un modo migliore per eseguire questa query ed ottenere lo stesso risultato, con una interrogazione più corretta e performante?

In Corso 5
MySql 11-12-2018 1 Risposta 1076 Visite +1

Risposte ( 1 approvate )

  1. Giacomo Barrile
    +2
    11-12-2018 22:26:01
    Rispondi

    Prova ad usare un LEFT JOIN dove i valori della seconda tabella (per la chiave primaria) siano null, con una sintassi sql del genere:

    SELECT Table1.* FROM Table1
    LEFT JOIN Table3 ON Table1.id = Table2.id 
    WHERE Table2.id IS NULL;

    Il JOIN è molto veloce, e sicuramente più performante di eventuali sub-query. Penso che questo possa fare al caso tuo.

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

Marco Mastroandrea

Marco Mastroandrea

Autore di questa domanda

 Domanda Precedente

 Elenco Domande 

Domanda Successiva