Oracle查询使用从另一个表获得的结果来获取特定表的结果

时间:2014-04-16 04:27:31

标签: oracle oracle11g

我是Oracle的新手,如果这个问题听起来真的很幼稚,请耐心等待。

因此,为了简单起见,我有两个表TableA和TableB只有两列id, name

我现在想要在id中获取name的特定值的TableA值。如果这是唯一的要求,这个查询就足够了 -

SELECT id from TableA WHERE name = 'some_name';

现在,我要做的是取消id并删除TableB中与id匹配的所有行 -

DELETE FROM TableB WHERE id = <id obtained from the above query>;

oracle中执行此功能的复合查询是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您知道特定id值只会返回一个name值,那么您只需

DELETE FROM tableB b
 WHERE b.id = (SELECT a.id
                 FROM tableA a
                WHERE a.name = 'some_name')

请注意,别名是可选的。但是,添加别名通常会使事情变得更清晰,因此任何人都无需猜测idname您在任何时候引用的内容。

如果给定名称的id中可能有多个tableA值,您只需使用IN而不是=

DELETE FROM tableB b
 WHERE b.id IN (SELECT a.id
                  FROM tableA a
                 WHERE a.name = 'some_name')

如果您知道针对tableA的查询只返回一行,这也会有效。如果你确定只返回一行,我更喜欢相等查询。如果我的期望被违反而不是可能会删除意外行,我通常会收到错误。