كيفية حذف الصفوف في جدول Teradata ليس في جدول آخر؟
سؤال
ما يجعل وضعي صعبًا هو أنه ليس لدي مفتاح عمود واحد ، مع قائمة بسيطة من المفاتيح الأساسية لحذفها (على سبيل المثال ، "حذف من الجدول حيث المفتاح في ([قائمة])"). لديّ أعمدة متعددة معًا كمفتاح أساسي ، وسأحتاج إلى الانضمام إليها جميعًا.
باستخدام ما أعرفه من قواعد البيانات الأخرى ، اعتقدت أن هذا قد يتم ذلك على النحو التالي:
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
)
لا تنتمي إلى StackOverflow