2017-01-27 3 views
3

У меня есть следующий запрос в PostgreSQL (1=1 является заполнителем для некоторого произвольного условия, как, видимо, я не могу писать WHERE TRUE в Sybase)ВЫБРАТЬ EXISTS в Sybase

SELECT EXISTS FROM (
    SELECT 1 FROM someTable WHERE 1=1 
) 

Как перевести их на SQL Server/Синтаксис Sybase? карусель способ это сделать:

SELECT COUNT(*) FROM (
    SELECT 1 FROM someTable WHERE 1=1 
) a 

& hellip; который может быть далее упрощен до:

SELECT COUNT(*) FROM someTable WHERE 1=1 

& hellip; но EXISTS чище, и я считаю, что это также стандарт ANSI.

+0

Что этот запрос должен делать? –

+0

В TSQL это 'where 1 = 1' абсолютно ничего не делает. Для чего вы его включаете? – iamdave

+1

@TimSchmelter возвращает TRUE или FALSE в зависимости от того, существует ли строка в таблице 'someTable', которая удовлетворяет произвольному условию (' 1 = 1' является заполнителем). –

ответ

1

exists() не возвращает значение, которое можно выбрать (не знаю почему). Вы можете проверить if exists(), но не select exists(). Вы также можете проверить where exists() или даже case when exists().

select 
    E = case 
     when exists(
      select 1 from master..spt_values 
     ) 
      then 1 
     else 0 
     end 

Если вы пытаетесь получить отсчеты для нескольких различных критериев, общий шаблон для SQL сервера будет что-то вроде:

select 
    ACount  = sum(case when x='A' then 1 else 0 end) 
    , ABCount = sum(case when x in ('A','B') then 1 else 0 end) 
    , TotalCount = count(*) /* or sum(1) */ 
from someTable 
1

Не уверен, что вы ожидаете «EXISTS», но это может сделать трюк

SELECT 1 
WHERE EXISTS (SELECT 1 FROM dbo.Table WHERE 1 = 1) 
+0

Это возвращает пустой набор результатов, если условие не выполняется. Не гарантируется возврат TRUE/FALSE. –

+0

Вот почему я в своем комментарии спросил, что я не уверен, что должен был существовать. Я мог бы редактировать мой anser, но ответ ниже решает проблему. –

0

Попробуйте это:

SELECT IIF(EXISTS (SELECT 1 FROM mytable WHERE 1=1), 1, 0) 
+0

[Код: 156, SQL State: S1000] Неверный синтаксис рядом с ключевым словом «EXISTS». –

+0

@MarcusJuniusBrutus Этот запрос запускается с SQL Server 2012 и далее. Какую версию вы используете? –

+0

Да, я должен был упомянуть об этом в комментарии. Я запускал его на Sybase ASE 15.7 –