كيفية حذف الصفوف في جدول Teradata ليس في جدول آخر؟

StackOverflow https://stackoverflow.com/questions/4321432

  •  29-09-2019
  •  | 
  •  

سؤال

ما يجعل وضعي صعبًا هو أنه ليس لدي مفتاح عمود واحد ، مع قائمة بسيطة من المفاتيح الأساسية لحذفها (على سبيل المثال ، "حذف من الجدول حيث المفتاح في ([قائمة])"). لديّ أعمدة متعددة معًا كمفتاح أساسي ، وسأحتاج إلى الانضمام إليها جميعًا.

باستخدام ما أعرفه من قواعد البيانات الأخرى ، اعتقدت أن هذا قد يتم ذلك على النحو التالي:

DELETE FROM
    table1 t1
  LEFT OUTER JOIN
      table2 t2
    ON
      t2.key1 = t1.key1 AND
      t2.key2 = t1.key2
  WHERE
    t2.key1 IS NULL;

لكن Teradata (V12) يستجيب برقم الخطأ 3706 ، قائلاً "خطأ في بناء الجملة: لا يُسمح بالجداول المرتبطة بالدخول من الجملة".

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

المحلول

وجدت أن هذا يتم بواسطة:

DELETE FROM
    table1
  WHERE
    (key1, key2) NOT IN (
      SELECT UNIQUE key1, key2 FROM table2
    );

نصائح أخرى

طريقة أخرى هي استخدام مسمة فرعية مرتبطة:

Delete From Table1
Where Not Exists(
                Select 1 
                From Table2 
                Where Table2.key1 = Table1.key1
                    And Table2.key2 = Table1.key2
                )
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top