Вот мой простой запрос, использующий версию SQL от Microsoft . Если я запрошу запись, которой не существует, я ничего не получу. Я бы предпочел, чтобы в этом сценарии возвращалось false (0). Ищу простейший способ учета отсутствия записей.
SELECT CASE
WHEN S.Id IS NOT NULL AND S.Status = 1 AND (S.WebUserId = @WebUserId OR S.AllowUploads = 1) THEN 1
ELSE 0
END AS [Value]
FROM Sites S
WHERE S.Id = @SiteId
Это похоже на Адама Робинсона, но использует ISNULL вместо COUNT.
Если во внутреннем запросе есть соответствующая строка, возвращается 1. Внешний запрос (с ISNULL) затем возвращает это значение 1. Если внутренний запрос не имеет соответствующей строки, он ничего не возвращает. Внешний запрос обрабатывает это как NULL, и поэтому ISNULL возвращает 0.
источник
Это может быть мертвая лошадь, другой способ вернуть 1 строку, когда строк не существует, - это объединить другой запрос и отобразить результаты, когда их нет в таблице.
источник
SELECT 0
), а затем сделалSUM
объединение. Просто и понятно.Что-то вроде:
источник
select 1
иselect 2
я добавилas <colName>
Я прочитал здесь все ответы, и мне потребовалось время, чтобы понять, что происходит. Нижеследующее основано на ответе Мо Сиско и некоторых связанных исследованиях.
Если ваш SQL-запрос не возвращает никаких данных, значит, нет поля с нулевым значением, поэтому ни ISNULL, ни COALESCE не будут работать так, как вы хотите. Используя подзапрос, запрос верхнего уровня получает поле с нулевым значением, и ISNULL и COALESCE будут работать так, как вы хотите / ожидаете.
Мой запрос
Мой запрос с комментариями
источник
Вам нужно только заменить WHERE на LEFT JOIN:
Это решение позволяет также возвращать значения по умолчанию для каждого столбца, например:
источник
Нет сопоставленной записи означает, что запись не возвращена. Нет места для «значения» 0, если записи не найдены. Вы можете создать сумасшедший запрос UNION, чтобы делать то, что вы хотите, но гораздо, намного, намного лучше просто проверять количество записей в наборе результатов.
источник
Это может быть один путь.
источник
А как насчет галстуков?
источник
источник
Ответ @hai-phan
LEFT JOIN
- это ключ, но это может быть немного сложно понять. У меня был сложный запрос, который тоже может ничего не вернуть. Я просто упростил его ответ для своих нужд. Его легко применить к запросу с большим количеством столбцов.источник
источник