Да, это возможно.
(вопрос я вижу выражение в вопросе несбалансированные круглые скобки, два дополнительных закрытие Паренса)
ISNULL
функция принимает два аргумента. Либо (или оба) этих аргументов могут быть выражениями, а функция ISNULL
является выражением. Так что да, вы можете вложить функции ISNULL в два, три, четыре или более уровня, насколько вам нужно.
Оператор SELECT, который возвращает одну строку, содержащую один столбец, может (обычно) использоваться как выражение. И несколько операторов SELECT (подзапросы) в запросе могут ссылаться на одни и те же таблицы (таблицы) и те же столбцы (столбцы).
Во многих случаях, когда мы видим запрос такого типа, он указывает либо на модель, которая не работает, либо указывает на другой способ получения эквивалентного результата.
EDIT
Как и другие ответы указали, тем более портативная, ANSI-совместимые COALESCE
функция может быть использована для получения эквивалентного результата.
Эти три выражения эквивалентны:
ISNULL(ISNULL(a,b),c)
ISNULL(a,ISNULL(b,c))
COALESCE(a,b,c)
, которые также эквивалентны этим (излишне избыточными) выражений:
COALESCE(COALESCE(a,b),c)
COALESCE(a,(COALESCE(b,c))
Контрольный пример:
create table tst (id int, a int, b int, c int);
insert into tst values
(1,NULL,NULL,NULL)
,(2,21,NULL,NULL)
,(3,NULL,32,NULL)
,(4,NULL,NULL,43)
,(5,51,52,NULL)
,(6,61,NULL,63)
,(7,NULL,72,73)
,(8,81,82,83);
-- SQL Server
SELECT ISNULL(ISNULL(a,b),c) AS t1
, ISNULL(a,ISNULL(b,c)) AS t2
, COALESCE(a,b,c) AS t3
FROM tst
ORDER BY id
-- MySQL
SELECT IFNULL(IFNULL(a,b),c) AS t1
, IFNULL(a,IFNULL(b,c)) AS t2
, COALESCE(a,b,c) AS t3
FROM tst
ORDER BY id
-- Oracle
SELECT NVL(NVL(a,b),c) AS t1
, NVL(a,NVL(b,c)) AS t2
, COALESCE(a,b,c) AS t3
FROM tst
ORDER BY id
@JoachimIsaksson К сожалению, кажется, другая RDBMS – user4035
@ user4035 Похож на 'ISNULL()' SQL SQL, но я предполагаю, что он может существовать в других базах данных тоже. –
@JoachimIsaksson Да, это SQL Server. В MySQL соответствующий оператор называется IFNULL – user4035