5

让我的情况变得棘手的是我没有一个列键,只有一个简单的主键列表要删除(例如,“从表中删除([list]))。我有多个列作为主键,并且需要加入所有列。

使用我对其他数据库的了解,我认为可以这样做:

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 子句中不允许加入表。”

4

2 回答 2

11

发现这是通过以下方式完成的:

DELETE FROM
    table1
  WHERE
    (key1, key2) NOT IN (
      SELECT UNIQUE key1, key2 FROM table2
    );
于 2010-12-01T05:23:10.250 回答
2

另一种方法是使用相关子查询:

Delete From Table1
Where Not Exists(
                Select 1 
                From Table2 
                Where Table2.key1 = Table1.key1
                    And Table2.key2 = Table1.key2
                )
于 2010-12-01T06:26:53.847 回答