تتوقع المقارنة العادية باستخدام = مع استعلام فرعي قياسي قيمة واحدة من الاستعلام الداخلي. إذا أعاد أكثر من صف، يرفض MySQL تنفيذ المقارنة حتى لو كانت بعض القيم متساوية. لا تختار قاعدة البيانات أول صف تلقائيًا، لأن ذلك سيترك معنى المقارنة غير محدد.
يعتمد التصحيح على المطلوب. إذا كان الهدف مقارنة القيمة بأي قيمة في مجموعة، فقد تكون IN مناسبة. أما إذا كان الهدف المقارنة بأعلى قيمة، فالأوضح استخدام MAX. ويمكن تضييق الشروط للوصول إلى صف فريد عندما يكون ذلك مطابقًا لقواعد البيانات والتطبيق.
مثال
WITH books AS (
SELECT 1 AS id, 10 AS price
UNION ALL SELECT 2, 20
)
SELECT id
FROM books
WHERE price = (SELECT MAX(price) FROM books);
إضافة LIMIT 1 دون ترتيب ليست إصلاحًا عامًا؛ فهي قد تخفي المشكلة وتختار قيمة لا تعبّر عن السؤال الأصلي. يجب أولًا تحديد معنى القيمة المطلوبة.
باختصار: عالج تعدد الصفوف باختيار بنية تعكس المطلوب، مثل تجميع محدد أو اختبار عضوية أو شرط يضمن التفرد.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.