Как удалить строки в таблице Teradata, которых нет в другой таблице? - PullRequest
4 голосов
/ 01 декабря 2010

Что усложняет мою ситуацию, так это то, что у меня нет одного ключа столбца с простым списком первичных ключей, которые нужно удалить (например, «удалить из таблицы, в которой вводится ([список])»). У меня есть несколько столбцов в качестве первичного ключа, и мне нужно было бы объединить их все.

Используя то, что я знаю о других базах данных, я подумал, что это можно сделать так:

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, говоря: «Синтаксическая ошибка: объединенные таблицы не допускаются в предложении FROM».

Ответы [ 2 ]

9 голосов
/ 01 декабря 2010

Нашли, что сделано:

DELETE FROM
    table1
  WHERE
    (key1, key2) NOT IN (
      SELECT UNIQUE key1, key2 FROM table2
    );
2 голосов
/ 01 декабря 2010

Другой способ - использовать коррелированный подзапрос:

Delete From Table1
Where Not Exists(
                Select 1 
                From Table2 
                Where Table2.key1 = Table1.key1
                    And Table2.key2 = Table1.key2
                )
...