سؤال

خادم MySQL الإصدار 5.0.45. النظر فيما يلي:

( SELECT CASE 
    WHEN t.group_id = 12 THEN 'yes' 
    ELSE 'no' 
    END
    FROM sample_table t
    WHERE t.user_id = 2
    AND t.group_id = 12 ) as foo

تعمل هذه الاستقامة الفرعية للبيان الأكبر كما أتوقع، مما يؤدي إلى قيمة سلسلة "نعم" أو "لا" معظم الوقت. انها ليست مثالية، ولكن هذا ما تحصل عليه للعمل على رمز شخص آخر!

ومع ذلك، في بعض الأحيان، يمكن للمحدد إرجاع مجموعة فارغة بشكل شرعي، وفي هذه الحالة يتم تعيين FOO إلى NULL. هذا لا يكسر التطبيق بالفعل، لكنه مزعج. هل هناك طريقة يمكنني أن أضمن أن فو ستكون دائما "نعم" أو "لا"، حتى لو لم تكن هناك صفوف مطابقة في الجدول؟

هل كانت مفيدة؟

المحلول

إذا كانت عملية استقبال Scalar، (أي أنت تستخدم في SELECT أو WHERE جملة، وليس من البند)، ثم استخدم هذا:

IF(
EXISTS
(
SELECT  NULL
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'yes', 'no'
)

أو حتى هذا:

COALESCE(
(
SELECT  'yes'
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'no')

نصائح أخرى

إذا كنت تريد أن تمثل المجموعة الفارغة حالة "لا"، فيمكنك القيام بذلك بدلا من ذلك:

select ... where ... (foo = 'no' or foo is null)

هذا من شأنه أن يعالج كلا الحالة دون الحاجة إلى تغيير فرعك الاستقبال بشكل كبير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top