1

在 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.

有任何想法吗?

注意 我不想通过在最后添加 FROM 子句来多次选择“true”,因为它可能很慢(如果 FROM 表有很多记录)或未定义(如果表有 0 条记录)。

4

3 回答 3

1

How about:

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

Perhaps more clearly:

SELECT TOP 1 IIF(EXISTS(
       SELECT * FROM foo
       WHERE <some condition>), 0, 1) As F1 
FROM MSysObjects
于 2009-11-30T21:57:26.417 回答
1

您也许可以使用计数

SELECT DISTINCT IIF((SELECT COUNT(*) AS Result FROM [Data Set]), 1, 0) FROM [Data Set];
于 2009-11-30T22:26:06.907 回答
0

大多数 EXISTS 查询可以重写为左连接:

    SELECT
      CASE
        WHEN foo.col is NULL 
        THEN 0
        ELSE 1
    END;
   ... LEFT JOIN foo on <where condition>
于 2009-11-30T21:50:07.017 回答