Определить наличие результатов в jet SQL?
Вопрос
В 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>
Не связан с StackOverflow