sql >> Databasteknik >  >> RDS >> Mysql

MySQL-mysterium:Nullvärdet skiljer sig inte från en icke-nullsträng

Exakt. NULL representerar ett okänt värde, inte något specifikt värde (det är inte detsamma som NULL i C eller nil i Ruby, etc.) I SQL, om du jämför något med det okända värdet, är resultatet också okänt. Och du kommer inte att få raderna där WHERE skicket är okänt.

Prova detta:

SELECT NULL <> 2;

och du kommer att se NULL som resultat.

Prova detta:

SELECT * FROM t WHERE NULL;

och inga rader kommer ut, även om tabellen t är enorm.

Om du verkligen behöver det du sa att du ville ha (och jag förespråkar inte detta), kan du göra något så här:

SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
    AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
    OR T.f1 <> T.f2


  1. MYSQL auto_increment_increment

  2. Mysql välj var inte i tabellen

  3. Hur INTERSECT fungerar i SQL Server

  4. Vad är sql-anslutningssträngen jag behöver använda för att komma åt localhost\SQLEXPRESS med Windows-autentisering eller SQL-autentisering?