سؤال

في جت، أريد لاختبار إذا شروط معينة تعود بأي نتائج.

وأريد استعلام التي ترجع بالضبط سجل واحد: "صحيح" إذا كانت هناك أية نتائج، "كاذبة" على خلاف ذلك

وهذا يعمل في 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 في النهاية، لأنه يمكن أن يكون بطيئا (إذا كان من الجدول كان العديد من السجلات) أو غير محدد (إذا كان الجدول 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