التعامل مع مجموعة فارغة في بيان حالة mysql
سؤال
خادم 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)
هذا من شأنه أن يعالج كلا الحالة دون الحاجة إلى تغيير فرعك الاستقبال بشكل كبير.