Вопрос

В Jet я хочу проверить, возвращают ли определенные условия какие-либо результаты.

Мне нужен запрос, который возвращает ровно одну запись:"true", если есть какие-либо результаты, "false" в противном случае.

Это работает в MS SQL:

SELECT
  CASE
    WHEN EXISTS(SELECT * FROM foo WHERE <some condition>)
    THEN 1
    ELSE 0
  END;

Это то, что я пробовал в Jet:

SELECT IIF(EXISTS(SELECT * FROM foo WHERE <some condition>), 0, 1);

что выдает мне ошибку:

Reserved error (-3025); there is no message for this error.

Есть какие-нибудь идеи?

ПРИМЕЧАНИЕ Я не хочу выбирать "true" несколько раз, нажимая на предложение FROM в конце, потому что это может быть медленным (если в таблице FROM было много записей) или неопределенным (если в таблице было 0 записей).

Это было полезно?

Решение

Как насчет:

SELECT TOP 1 IIF(EXISTS(
       SELECT * FROM foo 
       WHERE <some condition>), 0, 1) As f1 
FROM foo

Возможно, более четко:

SELECT TOP 1 IIF(EXISTS(
       SELECT * FROM foo
       WHERE <some condition>), 0, 1) As F1 
FROM MSysObjects

Другие советы

Возможно, вы смогли бы использовать счетчик

SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];

Большинство СУЩЕСТВУЮЩИХ запросов могут быть переписаны как левое соединение:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top