W MySQL 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, 'Fish', 'Rabbit');
Wynik:
Fish
W tym przypadku Fish
była pierwszą wartością inną niż NULL, więc COALESCE()
zwrócił tę wartość.
Rabbit
była również wartością inną niż NULL, ale pojawiła się po Fish
więc nie został zwrócony.
Gdy wszystkie wartości są NULL
Jeśli wszystkie wartości są NULL
, COALESCE()
zwraca NULL
:
SELECT COALESCE( null, null );
Wynik:
NULL
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, 2 * 10 );
Otrzymujemy to:
20
Przykład bazy danych
Załóżmy, że uruchamiamy następujące zapytanie:
SELECT
PetName,
PetType
FROM Pets;
I otrzymujemy następujący wynik:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Widzimy, że 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(PetType, 'Unknown') AS "PetType"
FROM Pets;
Wynik:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
W tym przypadku zastąpiliśmy wszystkie wartości NULL ciągiem Unknown
.
Nie musi to być jednak sznurek. Oto kolejny przykład, w którym wartości NULL są zastępowane liczbą całkowitą:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Wynik:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Nieprawidłowa liczba argumentów
Używanie COALESCE()
bez żadnych argumentów powoduje błąd:
SELECT COALESCE();
Wynik:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1