#sql #sql-server #tsql
Вопрос:
В своем SELECT
заявлении я присоединяюсь к двум таблицам. Возможно, что нет соответствующего значения Table2
, и в этом случае мое SELECT
заявление должно вернуться NULL
для этой колонки. Что я хочу сделать, так это то, что вместо возврата фактического значения, полученного от Table2
, я хочу вернуть 1.
Я думал, что мог бы использовать ISNULL
для этого, но эта функция предназначена для возврата фактического значения, если оно существует.
Вот как SELECT
выглядит мое заявление:
SELECT a.Id, ISNULL(b.PersonId, 0)
FROM Table1 AS a
LEFT OUTER JOIN Table2 AS b ON a.Id = b.Id
Здесь PersonId
столбец имеет UNIQUEIDENTIFIER
тип, и я не хочу возвращать ни a Guid
, ни 0. Вместо этого я хотел бы вернуть 1 или 0.
Как я могу справиться с этим сценарием?
Ответ №1:
Я думаю, что вы ищете CASE EXPRESSION
здесь.
SELECT a.Id, CASE WHEN b.PersonId IS NOT NULL THEN 1 ELSE 0 END
FROM Table1 AS a
LEFT OUTER JOIN Table2 AS b ON a.Id = b.Id
Ответ №2:
Помимо отличного ответа @DaleK, используется еще один вариант EXISTS
SELECT
a.Id,
CASE WHEN EXISTS (SELECT 1
FROM Table2 AS b
WHERE a.Id = b.Id)
THEN 1 ELSE 0 END
FROM Table1 AS a
Обратите внимание, что семантика здесь другая, так как это полу-соединение: строки не дублируются, если в Table2