Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tajemnica MySQL:wartość null nie różni się od łańcucha innego niż null

Dokładnie tak. NULL reprezentuje nieznaną wartość, a nie określoną wartość (to nie to samo co NULL w C lub nil w Ruby itp.) W SQL, jeśli porównasz coś z nieznaną wartością, wynik również jest nieznany. I nie dostaniesz wierszy, w których WHERE stan jest nieznany.

Spróbuj tego:

SELECT NULL <> 2;

a zobaczysz NULL w rezultacie.

Spróbuj tego:

SELECT * FROM t WHERE NULL;

i żadne wiersze nie wyjdą, nawet jeśli tabela t jest ogromny.

Jeśli naprawdę potrzebujesz tego, co powiedziałeś, że chcesz (a nie popieram tego), możesz zrobić coś takiego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_fetch_array zwraca tylko jeden wiersz

  2. PDO::rowCount VS COUNT(*)

  3. Jak podzielić ciąg rekordów oddzielony przecinkami i uporządkować je sekwencyjnie w MySQL?

  4. Laravel Eloquent z dwoma „GDZIE NIE W” w podzapytaniu

  5. mysql- Jak aplikować dotacje do kolumny?