2015-10-08 3 views
1

Итак, моя цель - выбрать идентификатор Джона и вернуть его вызывающему приложению. Если Джон не существует, я хочу вернуть 0 в приложение. Каков правильный способ сделать это?Есть ли лучший способ вернуть 0, если строка не существует?

IF EXISTS(SELECT ID From Table WHERE Name = 'John') 

    SELECT ID From Table WHERE Name = 'John' 

ELSE 

    SELECT 0 
+0

это хорошо вы можете использовать also'IF EXISTS (SELECT 1 Из таблицы WHERE Name = 'John') ' – wiretext

+3

Так вы хотите, чтобы 0 было волшебным значением, которое не представляет строк? Почему приложение не может понять, что ни строк, ни строк нет? –

ответ

2

Предполагая, что есть только один ID от Иоанна:

declare @ID int = 0 
select @ID = ID From Table WHERE Name = 'John' 
select @ID 
+1

Просто обратите внимание, что если 'Имя' не уникально, это приведет к непредсказуемой произвольной строке, поэтому вы можете не всегда видеть, что тот же идентификатор выходит, даже если данные не изменяются. –

1

Если вы используете SQL Server, вы можете использовать:

SELECT ISNULL((SELECT ID From Table WHERE Name = 'John'), 0) 

Для Oracle, эквивалентный метод NVL (поле, значение по умолчанию); (Не проверено)

+1

Обратите внимание, что это приведет к следующей ошибке, если для 'John' найдено несколько строк:' Msg 512, Level 16, State 1/Subquery возвращено более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. ' –

+0

Вы правы. Это в основном работает для получения определенного идентификатора. Спасибо за ваш комментарий. – aprovent

+0

Есть только один идентификатор для Джона, спасибо! – ddeamaral

1

Это решение будет работать, даже если Table имеет несколько строк Name = 'John'

SELECT ISNULL([Table].ID, ZeroID.ID) ID 
FROM (SELECT 0 ID) ZeroID 
    LEFT JOIN [Table] ON [Table].Name = 'John' 
Смежные вопросы