تحديد جود نتائج في SQL طائرة؟
سؤال
في جت، أريد لاختبار إذا شروط معينة تعود بأي نتائج.
وأريد استعلام التي ترجع بالضبط سجل واحد: "صحيح" إذا كانت هناك أية نتائج، "كاذبة" على خلاف ذلك
وهذا يعمل في 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>
لا تنتمي إلى StackOverflow