الانتقال إلى المحتوى

مشكلة في Update


amal4u

Recommended Posts

السلام عليكم

عندي 2 جداول الأول جدول الزبائن CLIENT
و الثاني جدول الفواتير FACTURE

جدول الفواتير يتضمن الزبائن CODE_CLI و الشخص المسؤول CODE_GEST , و الفاتورة CODE_FACT و الأيام DATE
عندي في هذا الجدول مجموعة من lines تضم نفس CODE_CLI و CODE_FACT و لكن ب CODE_GEST و DATE مختلفة

الجدول الأول يتضمن CLI_CODE_GEST و CODE_CLIENT


أود أن أعمل UPDATE على الجدول CLIENT
لكي أستطيع أن أعطي ل CLI_CODE_GEST الشخص المسؤول CODE_GEST ذو أول (أقدم) تاريخ DATE


فعلتها على الشكل التالي

UPDATE CLIENT SET CLI_CODE_GEST = (select CODE_GEST from FACTURE
where CODE_CLI=CODE_CLIENT and DATE in (select min(DATE)
from FACTURE where CODE_CLI=CODE_CLIENT
group by CODE_CLI))

المشكلة في الرسالة

ORA-01427 Sous-interrogation ramenant plusieurs lignes

رابط هذا التعليق
شارك

السلام عليكم
مشكله حضرتك ان جمله ال Update ال select الفيها بتجيب اكتر من row
علشان كده بيظهر الخطأ ده
وعلى قد ما فهمت من شرحك لو الزبون لي فاتورتين في نفس اليوم وبفرض كمان ان CODE_GEST
مختلف في الفاتورتين فأكيد هيظهر الخطأ ده

رابط هذا التعليق
شارك

و عليكم السلام

من جوابك فهمت خطئي

لكن كيف يمكن لي أن أتفادى هذا المشكل
يعني كيف يمكن لي أن اجيب سطر واحد من "لو الزبون لي فاتورتين في نفس اليوم وبفرض كمان ان CODE_GEST
مختلف في الفاتورتين"؟؟؟

رابط هذا التعليق
شارك

شكرا
لكن وجدت مشكلة أخرى

Impossible de mettre à jour CLI_CODE_GEST avec NULL

عملت هذا الكود

UPDATE CLIENT SET CLI_CODE_GEST = (select CODE_GEST from FACTURE
where CODE_CLI=CODE_CLIENT and CODE_GEST is not null and DATE in (select min(DATE)
from FACTURE where CODE_CLI=CODE_CLIENT
group by CODE_CLI)
and rownum=1
)

يعطيني نفس المساج

رابط هذا التعليق
شارك

;كده مشكلتك ان ال rowالجه قيمه CODE_GEST الفيه ب null واكيد CLI_CODE_GEST not null فظهرت المشكله دى
وعشان تستبعدي ال rows الفيها ال nullزودي
UPDATE CLIENT SET CLI_CODE_GEST = (select CODE_GEST from FACTURE
where CODE_CLI=CODE_CLIENT and CODE_GEST is not null and DATE in (select min(DATE)
from FACTURE where CODE_CLI=CODE_CLIENT
group by CODE_CLI)
and rownum=1
and CODE_GEST is not null
)
بس زي ماقلتلك فكره الجدولين كده مش مظبوطه حاوبى تشرحي انت عايزه تعملي ايه يمكن يكون في حاجه احسن

رابط هذا التعليق
شارك


;كده مشكلتك ان ال rowالجه قيمه CODE_GEST الفيه ب null واكيد CLI_CODE_GEST not null فظهرت المشكله دى
وعشان تستبعدي ال rows الفيها ال nullزودي
UPDATE CLIENT SET CLI_CODE_GEST = (select CODE_GEST from FACTURE
where CODE_CLI=CODE_CLIENT and CODE_GEST is not null and DATE in (select min(DATE)
from FACTURE where CODE_CLI=CODE_CLIENT
group by CODE_CLI)
and rownum=1
and CODE_GEST is not null
)
بس زي ماقلتلك فكره الجدولين كده مش مظبوطه حاوبى تشرحي انت عايزه تعملي ايه يمكن يكون في حاجه احسن



نفس المشكلة و نفس المساج أختي سارة


الجدولين عندي من الاول يعني مفروضين عليا استعملهم
انا عاوزة اخر تاريخ للفاتورة اعطيه للزبون في جدول CLIENT
رابط هذا التعليق
شارك

معلش انا مأخدتش بالي انك اصلا حاطه الشرط ده بس هو كده فعلا ماجبش ال row الفيه CODE_GEST ب null
والمشكله دى ظهرت تانى لان الsubquery ماجبش اي row فأعتبر القيمه null
جربي كده

UPDATE CLIENT SET CLI_CODE_GEST = (select NVL(CODE_GEST,CLI_CODE_GEST) 
                                   from FACTURE
                                   where CODE_CLI=CODE_CLIENT 
                                   and DATE in (select min(DATE)
                                               from FACTURE where CODE_CLI=CODE_CLIENT
                                               group by CODE_CLI)
                                   and rownum=1 
                                   ) 


كده لو قيمه CODE_GEST ب NULL هيسيب CLI_CODE_GEST زي ما هي

رابط هذا التعليق
شارك


معلش انا مأخدتش بالي انك اصلا حاطه الشرط ده بس هو كده فعلا ماجبش ال row الفيه CODE_GEST ب null
والمشكله دى ظهرت تانى لان الsubquery ماجبش اي row فأعتبر القيمه null
جربي كده

UPDATE CLIENT SET CLI_CODE_GEST = (select NVL(CODE_GEST,CLI_CODE_GEST) 
                                   from FACTURE
                                   where CODE_CLI=CODE_CLIENT 
                                   and DATE in (select min(DATE)
                                               from FACTURE where CODE_CLI=CODE_CLIENT
                                               group by CODE_CLI)
                                   and rownum=1 
                                   ) 


كده لو قيمه CODE_GEST ب NULL هيسيب CLI_CODE_GEST زي ما هي



شكرا
جربت الكود لكن نفس الميساج
كده احترت و مش عارفة اعمل ايه تم تعديل بواسطة amal4u
رابط هذا التعليق
شارك

UPDATE CLIENT SET CLI_CODE_GEST = (select NVL(CODE_GEST,CLI_CODE_GEST)  
                  from FACTUR 
                  where CODE_CLI=CODE_CLIENT
                  and DATE in (select min(DATE) 
                  from FACTUR where CODE_CLI=CODE_CLIENT
                  and CODE_GEST is not null
                 )
                                   and CODE_GEST is not null 
                                   and rownum=1  
                                   ) 
where CODE_CLIENT in  (select CODE_CLI   
                                   from FACTUR 
                                   where CODE_CLI=CODE_CLIENT
                                   and Date in (select min(Date) 
                                               from FACTUR where CODE_CLI=CODE_CLIENT
                                               and CODE_GEST is not null                        
                                               ) 
                                   and rownum=1  
                                  and CODE_GEST is not null
                                   ) 

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية