Выбрать из другой таблицы, если исходная таблица пуста - PullRequest
1 голос
/ 09 октября 2019

Как мне сделать так, чтобы запрос выбирался из другой таблицы, если первая таблица пуста.

Вот текущий запрос в моей программе на C #, я использую SQL Server.

private const string sql = @'SELECT TOP (1) (LOCALTIME) from dbo.[devicemessage] order by (localtime) desc;

Итак, этот код получает значение в столбце localtime из верхней строки 1, которая расположена в localtime desc;самое последнее время.

Что я хочу сделать, это примерно так:

If dbo.[devicemessage] is empty select top (1) (localtime) from dbo.[devicemessagehistory] order by (localtime) desc,
if table dbo.[devicemessage] not empty, get from dbo.[devicemessage].

Возможно ли сделать это в одной строке запроса, как я использую это в C #.

Ответы [ 2 ]

3 голосов
/ 09 октября 2019

Выберите isnull() или coalesce(). Получите max() devicemessage LOCALTIME, если доступно, а если нет, выберите devicemessagehistory.

. Если у вас только 2 условия isnull() достаточно, но если у вас несколько условий, я предлагаю использовать coalesce().

select isnull(
    (select max(LOCALTIME) from [devicemessage]),
        (select max(LOCALTIME) from [devicemessagehistory]))

select coalesce(
    (select max(LOCALTIME) from [devicemessage]),
        (select max(LOCALTIME) from [devicemessagehistory]))

, используя order by

select isnull(
    (select TOP 1 localtime from dbo.[devicemessage] order by localtime desc),
        (select TOP 1 localtime from dbo.[devicemessagehistory] order by localtime desc))
2 голосов
/ 09 октября 2019

Просто объедините 2 таблицы вместе с условием not exists. Это позволяет выбирать из 2 таблиц в одном запросе, но дает результат из второй таблицы, только если в первой таблице нет строк:

select top 1 localtime
from (
  select localtime
  from dbo.[devicemessage]
  union all
  select localtime
  from dbo.[devicemessagehistory]
  where not exists (select 1 from dbo.[devicemessage])
) X
order by localtime desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...