Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:restituisce solo i record senza alcuna associazione che soddisfi i criteri

Il modo più semplice è con not exists o left join :

select u.*
from users u left join
     addresses a
     on a.username = u.username and
        a.city = 'Peoria'
where a.city is null;

Il left join conserva tutti i record negli utenti e tutti i record negli addresses che corrispondono a on condizioni. In questo caso (perché il nome della città è nel on condizione), restituisce tutti gli utenti con informazioni sulle città o NULL i valori. Il where la clausola sceglie il NULL valori -- quelli non corrispondenti.

L'equivalente not exists potrebbe essere più facile da seguire:

select u.*
from users u 
where not exists (select 1
                  from addresses a
                  where a.username = u.username and
                        a.city = 'Peoria'
                 );