sql >> Base de Datos >  >> RDS >> Mysql

SQL:devuelva solo registros sin ninguna asociación que cumpla con los criterios

La forma más sencilla es 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;

La left join mantiene todos los registros en usuarios y cualquier registro en addresses que coincidan con on condiciones. En este caso (porque el nombre de la ciudad está en on condición), devuelve a todos los usuarios con información sobre las ciudades o NULL valores. El where cláusula elige el NULL valores -- los que no coinciden.

El not exists podría ser más fácil de seguir:

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