2016-01-05 4 views
-8

Я хочу написать запрос SQL, который делает:если иное условие в SQL

if этот запрос (select X from table1 where x = 'value1') имеет обратный результат 1 else if (select x from table2 where x = 'value2') имеет какой-либо обратный результат 2 еще вернуть 0.

Благодаря

+0

Опубликовать свой вопрос относительно чтения наборов данных в C# в качестве отдельного вопроса. Или, более подходящим образом, найдите многочисленные существующие ответы и веб-сайты, которые уже охватывают это. – Yuck

+0

@Yuck ok, я отредактирую свой вопрос, спасибо – lol

ответ

7

One метод является select и case:

select (case when exists (select X from table1 where x = 'value1') 
      then 1 
      when exists (select x from table2 where x = 'value2') 
      then 2 
      else 0 
     end) as flag 
+0

Спасибо, но как я могу прочитать часть «Then» из C#? как я могу получить к нему доступ? – lol

+2

Предположим, вы хотели выполнить запрос 'select 1;' из C#. Вы знаете, как это сделать? Если да, то вы также знаете, как выполнить запрос Гордона из C#. Тот факт, что он использует «случай», не имеет значения; они оба являются просто запросами, которые возвращают одно целое число. Если вы этого не сделаете, вы должны найти учебник по доступу к базе данных в C#. –

0

Это должно работать ALTH это не эффективный запрос и не лучшая практика использования таких запросов.

select 
    case when exists (select X from table1 where x = 'value1') then 1 
    when exists (select x from table2 where x = 'value2') then 2 
    else 0 
end; 
0

Выбрать случай - лучший способ решить эту проблему, когда запрос короткий. Но когда запрос длинный и сложный я хотел бы использовать определенные пользователем функции, такие как:

IF dbo.QueryExecution() IS NULL --do что-то ELSE --do что-то

И dbo.QueryExecution() может выполнить ваш запрос выберите X из таблицы1, где x = 'значение1'.

На этом пути легче протестировать и поддерживать запрос (по крайней мере, мне это легче).

1

Можно ли реализовать с помощью переменных:

DECLARE @FLAG INT = 0; 

SELECT @FLAG = 1 FROM table1 WHERE x = 'value1' 

IF @FLAG = 0 
BEGIN 
    SELECT @FLAG = 2 FROM table2 WHERE x = 'value2' 
END 

SELECT @FLAG 

Переменная @FLAG будет содержать значение 0, 1 или 2 в качестве таблиц содержит или нет данных. Если первый выбор не содержит данных, тогда вы запускаете второй, если не возвращаете данные, а затем возвращаете 0 (значение по умолчанию @FLAG).

Смежные вопросы