W MariaDB funkcja COALESCE()
operator zwraca pierwszą wartość inną niż NULL na liście lub NULL, jeśli nie ma wartości innych niż NULL.
Składnia
Składnia wygląda tak:
COALESCE(value,...)
Przykład
Oto prosty przykład do zademonstrowania:
SELECT COALESCE(null, 'Red', 'Black');
Wynik:
Red
W tym przypadku Red
była pierwszą wartością inną niż NULL, więc COALESCE()
zwrócił tę wartość.
Black
również nie był NULL, ale pojawił się po Red
więc nie został zwrócony.
Przykład bazy danych
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
I otrzymujemy następujący wynik:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +---------+---------------+
Widzimy, że ostatnie dwa wiersze mają wartości NULL w kolumnie DOB.
Gdybyśmy chcieli zastąpić NULL
z inną wartością, możemy zmienić zapytanie w następujący sposób:
SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Wynik:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None Supplied | | Meow | None Supplied | +---------+---------------+
Wyrażenia
COALESCE()
zwraca bieżącą wartość pierwszego wyrażenia, które początkowo nie ma wartości NULL
. Dlatego jeśli przekażemy takie wyrażenie:
SELECT COALESCE( null, 5 * 2 );
Otrzymujemy to:
10
Gdy wszystkie wartości są NULL
Jeśli wszystkie wartości są NULL
, COALESCE()
zwraca NULL
:
SELECT COALESCE( null, null );
Wynik:
NULL
COALESCE()
vs IFNULL()
W przypadku użycia z dwiema wartościami COALESCE()
działa tak samo jak IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Wynik:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Nieprawidłowa liczba argumentów
Używanie COALESCE()
bez żadnych argumentów powoduje błąd:
SELECT COALESCE();
Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1