Ahmed Ebrahim11 نشر منذ 11 ساعة أرسل تقرير نشر منذ 11 ساعة السلام عليكم اريد ان اسال ما الفرق بين ال queries التاليه select product_id,year as first_year, quantity, price from Sales where(product_id, year) in (select product_id, min(year) from Sales group by product_id) // تخرج حلا مختلف select product_id,min(year) as first_year, quantity, price from Sales اري انه لا فرق 2 اقتباس
0 Chihab Hedidi نشر منذ 9 ساعة أرسل تقرير نشر منذ 9 ساعة على الرغم من أن الجملتين قد تبدوان متشابهتين، إلا أنهما تنتجان نتائج مختلفة بسبب كيفية التعامل مع الأعمدة الإضافية بجانب الأعمدة المحسوبة، حيث في الإستعلام الأول يتم تحديد أول سنة لكل منتج باستخدام الاستعلام الداخلي، و يتم بعد ذلك مطابقة السجل بالكامل بناء على product_id, year مع النتيجة المحسوبة من الاستعلام الداخلي، و هذا يعني أنه يتم تحديد سجل واحد فقط لكل منتج يتوافق مع أصغر سنة و النتيجة تكون كل منتج سيظهر مرة واحدة مع بيانات quantity وprice التي تتوافق مع السنة الأولى. أما في الكود الثاني هنا يتم استخدام group by مع product_id، و يتم حساب أصغر سنة لكل منتج، ولكن الأعمدة الأخرى ليست ضمن الدالة التجميعية أو في عبارة group by، و في معظم قواعد البيانات، ستقوم قاعدة البيانات باختيار قيمة عشوائية أو غير محددة من الأعمدة الإضافية quantity وprice للسجلات المتعلقة بكل مجموعة. اقتباس
0 ياسر مسكين نشر منذ 17 دقيقة أرسل تقرير نشر منذ 17 دقيقة الفرق بين الاستعلامين هو في طريقة اختيار السجلات التي يتم عرضها، وسبب الاختلاف في النتائج هو كيفية تعامل كل استعلام مع الأعمدة "quantity" و"price" ففي الاستعلام الأول: select product_id, year as first_year, quantity, price from Sales where (product_id, year) in ( select product_id, min(year) from Sales group by product_id ); يتم تحديد السجلات التي تحمل أقل سنة (min(year)) لكل منتج (product_id) الشرط (product_id, year) يضمن أن الصف المحدد هو الذي يحتوي على أقل قيمة للسنة بعدها يتم الاحتفاظ بالأعمدة quantity و price كما هي موجودة في الصف الموافق لأقل سنة. بينما الاستعلام الثاني: select product_id, min(year) as first_year, quantity, price from Sales group by product_id; يستخدم group by لتجميع الصفوف حسب product_id بحيث يتم إرجاع أقل سنة (min(year)) لكل منتج، لكن لا يمكن ل SQL هنا معرفة أي قيمة من quantity أو price تختارها لأنهما لا يشتركان في قاعدة التجميع. لذلك إذا أردت التأكد من أن القيم الخاصة بـ quantity و price صحيحة، استمر باستخدام الاستعلام الأول، لأنه يربط القيم بالسجل الصحيح أما إذا كنت تريد العمل فقط مع السنة الدنيا دون الحاجة للتأكد من ارتباط الأعمدة الأخرى بالسنة، يمكنك استخدام الاستعلام الثاني. اقتباس
السؤال
Ahmed Ebrahim11
السلام عليكم
اريد ان اسال ما الفرق بين ال queries التاليه
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.