Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL:Gibt nur Datensätze ohne Zuordnungen zurück, die die Kriterien erfüllen

Der einfachste Weg ist mit not exists oder 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;

Der left join behält alle Datensätze in Benutzern und alle Datensätze in addresses die mit on übereinstimmen Bedingungen. In diesem Fall (weil der Städtename im on steht Bedingung), gibt es allen Benutzern entweder Informationen über die Städte oder NULL zurück Werte. Das where -Klausel wählt den NULL Werte -- die nicht übereinstimmenden.

Der entsprechende not exists könnte einfacher zu befolgen sein:

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