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

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
* * - - - 1 صوت

مشكلة في Update


12 رد (ردود) على هذا الموضوع

#1 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 03 September 2010 - 01:25 PM

السلام عليكم

عندي 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

#2 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 05 September 2010 - 03:00 PM

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

#3 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 06 September 2010 - 12:40 PM

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

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

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

#4 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 06 September 2010 - 02:34 PM

ممكن تزودي في ال subquery
and rownum=1
كده هيجبلك واحد بس
بس على فكره على الفهمته تركيبه الجدولين كده مش صح

#5 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 06 September 2010 - 02:49 PM

مفهمتش كيف اعملها يعني اين أضيف rownum

#6 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 06 September 2010 - 02:56 PM

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)
and rownum=1
)

#7 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 06 September 2010 - 03:05 PM

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

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
)

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

#8 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 07 September 2010 - 11:05 AM

;كده مشكلتك ان ال 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
)
بس زي ماقلتلك فكره الجدولين كده مش مظبوطه حاوبى تشرحي انت عايزه تعملي ايه يمكن يكون في حاجه احسن

#9 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 07 September 2010 - 12:48 PM

;كده مشكلتك ان ال 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

#10 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 08 September 2010 - 11:00 AM

معلش انا مأخدتش بالي انك اصلا حاطه الشرط ده بس هو كده فعلا ماجبش ال 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 زي ما هي

#11 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 08 September 2010 - 12:58 PM

معلش انا مأخدتش بالي انك اصلا حاطه الشرط ده بس هو كده فعلا ماجبش ال 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, 08 September 2010 - 01:00 PM.


#12 sara gamal

sara gamal

    عضو نشط

  • الأعضــاء
  • 411 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 08 September 2010 - 04:07 PM

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

                                    )


#13 amal4u

amal4u

    عضو

  • الأعضــاء
  • 15 مشاركة

تاريخ المشاركة 08 September 2010 - 04:49 PM

شكرا على مجهودك

عمل الكود معي بطريقة فعالة
اشكرك كثيرا