سؤال

ولدي الطاولة، التي أنا إدراج سجلات إلى جدول آخر. ما هي أفضل طريقة للاحتفال سجل إدراج، لذلك لن تكون محاولة ليتم إدراجها مرة أخرى؟

هل كانت مفيدة؟

المحلول

ويمكنك ان ترى الفرق بين الجدولين مثل ذلك:

<اقتباس فقرة>   

وSELECT * FROM tableFoo
    LEFT JOIN tableBar ON tableFoo.commonColumn = tableBar.commonColumn
    WHERE IS NULL tableBar.commonColumn

والفكرة هي أن كلا الجدولين لها عمود لمتابعة المباراة على، والسجلات التي انضمت عند العمود باطل هي السجلات التي تكون موجودة في tableBar فقط.

والسبب يعمل هذا لأن اليسار ينضم إرادة بإرجاع السجلات حتى لو أحد الجداول له قيم فارغة، على عكس صلة داخلية، والتي لا العكس.

وبعد أن تحصل على تلك السجلات، يمكنك إدراج استنادا إلى معرفات عاد.

نصائح أخرى

وإدراج سجلات الوحيدة ليس في الجدول الآخر الخاص بك، إما باستخدام بند NOT EXISTS أو من خلال الانضمام إلى اليسار وتصفية كافة السجلات not-NULL من نتيجة

وأفضل طريقة هي استخدام مفتاح مشترك (أو لديك مفتاح الجدول الأول أن يكون الجزء الرئيسي للمفتاح الجدول الثاني). بهذه الطريقة، يمكنك ببساطة اختيار الصفوف من TABLE1 حيث يوجد لا في الجدول 2.

وأفضل بديل، إذا كنت بحاجة إلى تغيير المفتاح في بعض الطريق، هو استخدام مشغل إدراج على TABLE1: عند إدراج صفوف هناك، وسوف الزناد النار، ويمكنك إدراج البيانات في TABLE2. وهذا له فائدة - وكذلك العيب - استخدام عملية واحدة. انها مصلحة في ذلك فإنك تحتفظ تناسق البيانات، يتم استخدام العيب إذا TABLE2 للإبلاغ أو غيرها من الأغراض غير الضرورية.

ولا قررت استخدام العلم في TABLE1 يشير لقد تم إدراج الصف. هذا هو قبيح من كل من التصميم المنطقي والمادي، لأنك اقتران البيانات في الجدول لعملية يستخدم الجدول.

وهناك نوعان من الأساليب التي تستخدم في كثير من الأحيان. اعتمادا على طبيعة الجدول، اتجاه واحد قد يكون أفضل من الآخر، ولكن إذا كنت أذهب مع رقم 2، وهناك فرص المرجح أن تجعل بنية الجدول بشكل أفضل.

1) تأكد من فهرسة الجداول الخاصة بك ويكون لها مفتاح أساسي جيد. تحديد كافة السجلات من TABLE1 حيث لا وجود المفتاح الأساسي في table2. هذا يعمل إرادة للجداول تطبيع

2). إذا الجداول الخاصة بك ليست طبيعية وليس لديهم جيدة لها مفاتيح جيدة، يمكنك إضافة ProcessedDate إلى TABLE1. إدراج جميع السجلات التي تحتوي على ProcessDate اغية ثم تعيين ProcessDate إلى التاريخ والوقت الحالي. سيكون لديك فقط للتأكد من أن أدرجت أنه لا توجد سجلات جديدة إلى TABLE1 خلال الوقت الذي تم إدخالها في table2.

ودون معرفة بنية الجدول الخاص بك من الصعب إعطاء إجابة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top