将select语句转换为delete

时间:2012-06-15 15:40:19

标签: oracle

我的数据库中有一种元数据表,我想要剔除旧记录。 我创建了一个“select”语句,用于选择要删除的行:

select m.tablename, m.OWNERNAME
    from MAPINFO.MAPINFO_MAPCATALOG m
    left outer join sys.ALL_TABLES t
    on TRIM(m.tablename) = t.TABLE_NAME and TRIM(m.OWNERNAME) = t.owner
    where t.num_rows is null

这给了我113行。

但是,我无法弄清楚如何将其转换为“删除”。我打算使用:

delete from MAPINFO.MAPINFO_MAPCATALOG where tablename in (...)

但这会删除115行。有两个问题:

  1. 我需要比较tablename和ownername。通过仅比较表名,我将删除两个不应删除的表。
  2. 该表没有唯一的密钥,我无法创建它们。
  3. 鉴于上述情况,我该如何进行此删除?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

delete from MAPINFO.MAPINFO_MAPCATALOG where (tablename, ownername) in (...)
相关问题