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

اريد عمل update لبيانات الجدول الثاني .. على حسب الناتج من الجدول الاول


Yousef_Elkordi

Recommended Posts

السلام عليكم

اخواني .. لدي DB بهال 2 tabels الجدول الاول فية بيانات العملاء و ارقامهم .. وقمت بإستخراج كمية من البيانات من الجدول الاول ( 50 اسم ) .. عن طريق كويري .. و لم احفظها باي جدول جديد

ولدي الجدول الثاني فية ايضا بيانات العملاء و ارقامهم ...
الان المشكلة اني اريد ان اعدل بيانات الجدول الثاني ...اي ان اقوم بعمل update لبيانات الجدول الثاني .. على حسب الناتج من الجدول الاول

فارجو الاجابة باسرع وقت ممكن
ولكم جزيل الشكر

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

بص يا أخير حسب ، يمكنك عمل Delete لكافة السجلات الموجودة في الجدول الثاني ومن ثم تدرج من جديد البيانات المرتجعة في الإستعلام كما يلي :

Begin
  Delete From Table2;
  Insert Into Table2(Field1, Field2, Field3)  Select Field1,Field2,Field3 From Table1 Where Field1 <= 50;
  Commit;
End;
/



أو يمكنك عمل Cursor ثم تعمل Loop علي كافة السجلات المرتجعة ، ومن ثم تشوف إن كان السجل موجود أم لا ، لو مش موجود تعمل له Insert ولو موجود تعمل له Update



بالتوفيق

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

للتوضيح ... انا لا اريد ان اعمل دليت لاي شي من البيانات من الجدول الثاني .. انا اريد تحديث بعض البيانات من الجدول الثاني ببيانات من الجدول الاول
مثال :

table 1
----------------------------------------------------------------
cust_code - cust name - loc
----------------------------------------------------------------
c200 - Salim - Egypt
c400 - Marwan - UK
c600 - Yousef - USA
c500 - Ali - Amman

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

table 2
---------------------------------------------------------------------------------
cust_code - Age - cust name - loc
---------------------------------------------------------------------------------
c200 - 22 - Salim - Egypt
c400 - 25 - Marwan - Yaman
c600 - 35 - Yousef - Kuwait
c500 - 30 - Ali - Amman

لان لو تلاحظو ... الاسمين yousef و marwan بالجدول الاول فيهم ال location مختلف عن بعض ....

الان .. انا قمت بكتابة كويري ... قمت عن طريقها باخراج البيانات المختلفة من الجدول الاول ... و اريد فقط تبديل هذة البيانات المختلفة من الجدول الاول .. بالجدول الثاني .. فما هو الحل ...!!!

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

عليك بالmerge أخي الكريم وهي من ضمن جمل ال sql في أوراكل

ولا أريد أطيل فهذا مثال على استخدام الmerge

merge [ hints ] into table-name-1 | view-name-1 [ alias-1 ]
using table-name-2 | view-name-2 | subquery [ alias-2 ] on ( condition )
[ merge-update-clause ] [ merge-insert-clause ] [ error-logging-clause ];
create table table_dest (
  id  number primary key,
  txt varchar2(20)
);

insert into table_dest values (1,'one');
insert into table_dest values (3,'three');
insert into table_dest values (5,'five');

commit;
create table table_source (
  id  number primary key,
  txt varchar2(20)
);

insert into table_source values (2,'TWO');
insert into table_source values (3,'THREE');

commit;
merge into table_dest d
using
 table_source s on (s.id = d.id)
when     matched then update set d.txt = s.txt
when not matched then insert (id, txt) values (s.id, s.txt);
select * from table_dest; ID TXT
---------- --------------------
        1 one
        3 THREE
        5 five
        2 TWO
Note: It is not possible to update a field in the destination table that is used to merge with the source table.




وهذا المصدر اذا لم يظهر الكود بشكل واضح
http://www.adp-gmbh.ch/ora/sql/merge.html

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

السلام عليكم
اخي العزيز ..
جربت الكود التالي


merge into table_dest d
using
table_source s on (s.id = d.id)
when matched then update set d.txt = s.txt
when not matched then insert (id, txt) values (s.id, s.txt);
select * from table_dest; ID TXT

ولكن الامر WHEM غير معرف بال SQL ???

ولك جزيل الشكر

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

قد تكون المشكلة في الجمله من نسخة الداتابيس لأن merge مدعومة فقط منذ oracle9i وما بعدها أما النسخ السابقة فهي غير موجودة


أعتقد ان الحل سيكون بعدة أجزاء أي سنقسم عبارة الmerge
فسيكون عندي عبرة لإدخال ما هو جديد
وعبارة أخرى تعدل الموجود
أنا جربت على الجداول السابقة في المثال فأعطتني نفس نتيجة الmerge

وهذا هو الكود

update table_dest a
set a.txt = nvl((select b.txt
                  from table_source b
                  where b.id = a.id
                ),a.txt)   
where exists(select 1
              from table_source b2
              where b2.id = a.id)
/               

insert into table_dest(id,txt) SELECT a.id, a.txt
 FROM table_source a
 where not exists (SELECT 1
                   FROM table_dest b
                   where b.id = a.id)



وهما كما ترى جمليتين واحدة تعدل الموجود أصلا
وأخرى تدخل الغير موجود

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

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

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

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

×   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.

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

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

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