我是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中执行此功能的复合查询是什么?
谢谢!
答案 0 :(得分:1)
如果您知道特定id
值只会返回一个name
值,那么您只需
DELETE FROM tableB b
WHERE b.id = (SELECT a.id
FROM tableA a
WHERE a.name = 'some_name')
请注意,别名是可选的。但是,添加别名通常会使事情变得更清晰,因此任何人都无需猜测id
或name
您在任何时候引用的内容。
如果给定名称的id
中可能有多个tableA
值,您只需使用IN
而不是=
DELETE FROM tableB b
WHERE b.id IN (SELECT a.id
FROM tableA a
WHERE a.name = 'some_name')
如果您知道针对tableA
的查询只返回一行,这也会有效。如果你确定只返回一行,我更喜欢相等查询。如果我的期望被违反而不是可能会删除意外行,我通常会收到错误。