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

mysql SELECT NOT IN () -- disjoint sæt?

Du skal bruge ikke eksisterer:

SELECT DISTINCT a, b, c FROM t1 WHERE NOT EXISTS (SELECT NULL FROM t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)

Brug af NOT IN er ikke den bedste metode til at gøre dette, selvom du kun markerer én tast. Årsagen er, at hvis du bruger NOT EXISTS, skal DBMS kun tjekke indekser, hvis der findes indekser for de nødvendige kolonner, hvor det for NOT IN skal læse de faktiske data og oprette et komplet resultatsæt, der efterfølgende skal kontrolleres .

At bruge en LEFT JOIN og derefter tjekke for NULL er også en dårlig idé, det vil være smerteligt langsomt, når tabellerne er store, da forespørgslen skal få hele til at joine, læse begge tabeller fuldt ud og efterfølgende smide en masse af det væk. Hvis kolonnerne tillader NULL-værdier, vil kontrol af NULL også rapportere falske positiver.



  1. mySQL konverter varchar til dato

  2. Sådan søger du i en streng i SQL Server-databaser

  3. hvordan får man det første eller (et hvilket som helst) element fra en LiveData List i Android MVVM-arkitektur?

  4. Wildfly 10 kan ikke indlæse MySQL XA-driver ved opstart