Определить наличие результатов в jet SQL? - PullRequest
1 голос
/ 01 декабря 2009

В 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 записей).

Ответы [ 3 ]

1 голос
/ 01 декабря 2009

Как насчет:

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
1 голос
/ 01 декабря 2009

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

SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];
0 голосов
/ 01 декабря 2009

Большинство запросов EXISTS могут быть переписаны как левое соединение:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
...